From dcee51c6565c9c3c4772113b1da3617cad148466 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 14 May 2015 15:55:33 +0200 Subject: [PATCH] log when failed to load the image from a tag --- .../decompiler/flash/helpers/ImageHelper.java | 9 +++++++++ .../decompiler/flash/tags/DefineBitsJPEG2Tag.java | 7 ++++++- .../decompiler/flash/tags/DefineBitsJPEG3Tag.java | 9 +++++++-- .../decompiler/flash/tags/DefineBitsJPEG4Tag.java | 7 ++++++- .../flash/tags/DefineBitsLossless2Tag.java | 2 +- .../flash/tags/DefineBitsLosslessTag.java | 2 +- .../decompiler/flash/tags/DefineBitsTag.java | 15 +++++++++++---- 7 files changed, 41 insertions(+), 10 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/ImageHelper.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/ImageHelper.java index e631401dd..657592a3a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/ImageHelper.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/ImageHelper.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.helpers; import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -32,8 +33,16 @@ import javax.imageio.ImageIO; */ public class ImageHelper { + public static BufferedImage read(byte[] data) throws IOException { + return read(new ByteArrayInputStream(data)); + } + public static BufferedImage read(InputStream input) throws IOException { BufferedImage in = ImageIO.read(input); + if (in == null) { + return null; + } + int type = in.getType(); if (type != BufferedImage.TYPE_INT_ARGB && type != BufferedImage.TYPE_INT_RGB) { // convert to ARGB diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java index 3bc1cbe50..a3fe4b7a4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java @@ -72,7 +72,12 @@ public class DefineBitsJPEG2Tag extends ImageTag implements AloneTag { } try { BufferedImage image = ImageHelper.read(getImageData()); - SerializableImage ret = image == null ? null : new SerializableImage(image); + if (image == null) { + Logger.getLogger(DefineBitsJPEG2Tag.class.getName()).log(Level.SEVERE, "Failed to load image"); + return null; + } + + SerializableImage ret = new SerializableImage(image); cachedImage = ret; return ret; } catch (IOException ex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java index 960911ac1..f83b57aa9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java @@ -61,7 +61,7 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { @Override public void setImage(byte[] data) throws IOException { if (ImageTag.getImageFormat(data).equals("jpg")) { - SerializableImage image = new SerializableImage(ImageHelper.read(new ByteArrayInputStream(data))); + SerializableImage image = new SerializableImage(ImageHelper.read(data)); byte[] ba = new byte[image.getWidth() * image.getHeight()]; for (int i = 0; i < ba.length; i++) { ba[i] = (byte) 255; @@ -97,7 +97,12 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { } try { BufferedImage image = ImageHelper.read(getImageData()); - SerializableImage img = image == null ? null : new SerializableImage(image); + if (image == null) { + Logger.getLogger(DefineBitsJPEG3Tag.class.getName()).log(Level.SEVERE, "Failed to load image"); + return null; + } + + SerializableImage img = new SerializableImage(image); if (bitmapAlphaData.length == 0) { cachedImage = img; return img; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java index 7beb81d69..d74333da0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java @@ -99,7 +99,12 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag { } try { BufferedImage image = ImageHelper.read(getImageData()); - SerializableImage img = image == null ? null : new SerializableImage(image); + if (image == null) { + Logger.getLogger(DefineBitsJPEG4Tag.class.getName()).log(Level.SEVERE, "Failed to load image"); + return null; + } + + SerializableImage img = new SerializableImage(image); if (bitmapAlphaData.getLength() == 0) { cachedImage = img; return img; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java index db47ef54b..0b0e0e3fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java @@ -105,7 +105,7 @@ public class DefineBitsLossless2Tag extends ImageTag implements AloneTag { @Override public void setImage(byte[] data) throws IOException { - SerializableImage image = new SerializableImage(ImageHelper.read(new ByteArrayInputStream(data))); + SerializableImage image = new SerializableImage(ImageHelper.read(data)); ALPHABITMAPDATA bitmapData = new ALPHABITMAPDATA(); int width = image.getWidth(); int height = image.getHeight(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java index 1d19d1c22..858d1dc24 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java @@ -102,7 +102,7 @@ public class DefineBitsLosslessTag extends ImageTag implements AloneTag { @Override public void setImage(byte[] data) throws IOException { - SerializableImage image = new SerializableImage(ImageHelper.read(new ByteArrayInputStream(data))); + SerializableImage image = new SerializableImage(ImageHelper.read(data)); int width = image.getWidth(); int height = image.getHeight(); bitmapData = new BITMAPDATA(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java index c9e26d9b2..42206f643 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java @@ -25,7 +25,7 @@ import com.jpexs.decompiler.flash.types.BasicType; import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.SerializableImage; -import java.io.ByteArrayInputStream; +import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -98,9 +98,16 @@ public class DefineBitsTag extends ImageTag implements TagChangedListener { baos.write(jttdata, jttErrorLength, jttdata.length - jttErrorLength - 2); } - int jpegDataErrorLength = hasErrorHeader(jpegData) ? 4 : 0; - baos.write(jpegData.getArray(), jpegData.getPos() + jpegDataErrorLength + 2, jpegData.getLength() - jpegDataErrorLength - 2); - SerializableImage ret = new SerializableImage(ImageHelper.read(new ByteArrayInputStream(baos.toByteArray()))); + int errorLength = hasErrorHeader(jpegData) ? 4 : 0; + baos.write(jpegData.getArray(), jpegData.getPos() + errorLength, jpegData.getLength() - errorLength); + + BufferedImage image = ImageHelper.read(baos.toByteArray()); + if (image == null) { + Logger.getLogger(DefineBitsTag.class.getName()).log(Level.SEVERE, "Failed to load image"); + return null; + } + + SerializableImage ret = new SerializableImage(image); cachedImage = ret; return ret; } catch (IOException ex) {