From 1af9a0c48ce110b4b0d618c12f77edd2da5159ae Mon Sep 17 00:00:00 2001 From: guinotphil Date: Fri, 15 Nov 2013 15:35:17 +0100 Subject: [PATCH 1/3] Manage error occuring with non-seekable stream such as URLConnection. --- .../imageio/plugins/jmagick/TargaImageReaderSpi.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/TargaImageReaderSpi.java b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/TargaImageReaderSpi.java index 6d838b1c..d034fe87 100755 --- a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/TargaImageReaderSpi.java +++ b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/TargaImageReaderSpi.java @@ -63,7 +63,11 @@ public class TargaImageReaderSpi extends JMagickImageReaderSpiSupport { // new byte[] {-1, 0x01, 0x20}, // Type 31: Compressed CM // new byte[] {-1, 0x01, 0x21}, // Type 32: Compressed CM, 4 pass // }, - pSource.seek(pSource.length() - 18); + try { + pSource.seek(pSource.length() - 18); + } catch (IndexOutOfBoundsException e) { + return false; + } byte[] magic = new byte[18]; pSource.readFully(magic); From 371aa4298b280d372b39aa0f94d31d248fa66c19 Mon Sep 17 00:00:00 2001 From: guinotphil Date: Fri, 15 Nov 2013 15:36:57 +0100 Subject: [PATCH 2/3] Force the use of the package's class loader since JMagick class may not be available with current Thread's class loader (eg. application servers such as JBoss AS 7...) --- .../imageio/plugins/jmagick/JMagickImageReaderSpiSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JMagickImageReaderSpiSupport.java b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JMagickImageReaderSpiSupport.java index ebfd5d15..cb4a4d45 100755 --- a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JMagickImageReaderSpiSupport.java +++ b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JMagickImageReaderSpiSupport.java @@ -46,7 +46,7 @@ import java.util.Locale; */ abstract class JMagickImageReaderSpiSupport extends ImageReaderSpi { - final static boolean AVAILABLE = SystemUtil.isClassAvailable("com.twelvemonkeys.imageio.plugins.jmagick.JMagick"); + final static boolean AVAILABLE = SystemUtil.isClassAvailable("com.twelvemonkeys.imageio.plugins.jmagick.JMagick", JMagickImageReaderSpiSupport.class); /** * Creates a JMagickImageReaderSpiSupport From dd2327e70e32bdd5bdc8f70aa261b96414ce5dc0 Mon Sep 17 00:00:00 2001 From: guinotphil Date: Fri, 15 Nov 2013 15:38:50 +0100 Subject: [PATCH 3/3] * Correct test of 4th byte of header * Handle Photoshop 3's JPEG format --- .../imageio/plugins/jmagick/JPEGImageReaderSpi.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JPEGImageReaderSpi.java b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JPEGImageReaderSpi.java index 797714ca..ad93a67e 100755 --- a/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JPEGImageReaderSpi.java +++ b/imageio/imageio-jmagick/src/main/java/com/twelvemonkeys/imageio/plugins/jmagick/JPEGImageReaderSpi.java @@ -52,12 +52,13 @@ public class JPEGImageReaderSpi extends JMagickImageReaderSpiSupport { boolean canDecode(ImageInputStream pSource) throws IOException { // new byte[][] {new byte[] {(byte) 0xff, (byte) 0xd8, (byte) 0xff, (byte) 0xe0}, // new byte[] {(byte) 0xff, (byte) 0xd8, (byte) 0xff, (byte) 0xe1}}, // JPEG + // new byte[][] {new byte[] {(byte) 0xff, (byte) 0xd8, (byte) 0xff, (byte) 0xed}}, // PHOTOSHOP 3 JPEG // new byte[][] {new byte[] {(byte) 0xff, (byte) 0xd8, (byte) 0xff, (byte) 0xee}}, // JPG byte[] magic = new byte[4]; pSource.readFully(magic); return magic[0] == (byte) 0xFF && magic[1] == (byte) 0xD8 && magic[2] == (byte) 0xFF && - (magic[3] == (byte) 0xE0 || magic[0] == (byte) 0xE1 || magic[0] == (byte) 0xEE); + (magic[3] == (byte) 0xE0 || magic[3] == (byte) 0xE1 || magic[3] == (byte) 0xED || magic[3] == (byte) 0xEE); }