diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDUtil.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDUtil.java index 18aae338..89333012 100644 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDUtil.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDUtil.java @@ -142,7 +142,8 @@ final class PSDUtil { @Override public InputStream nextElement() { - return new SubStream(new DecoderStream(createStreamAdapter(stream, byteCounts[index++]), new PackBitsDecoder(), rowLength), rowLength); + // Add 128 bytes extra buffer as worst case if the encoder (GIMP) added garbage bytes at the end + return new SubStream(new DecoderStream(createStreamAdapter(stream, byteCounts[index++]), new PackBitsDecoder(), rowLength + 128), rowLength); } } } diff --git a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java b/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java index 9f6ecbb3..185f47e1 100755 --- a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java +++ b/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java @@ -109,7 +109,9 @@ public class PSDImageReaderTest extends ImageReaderAbstractTest // CMYK, uncompressed + contains some uncommon MeSa (instead of 8BIM) resource blocks new TestData(getClassLoaderResource("/psd/fruit-cmyk-MeSa-resource.psd"), new Dimension(400, 191)), // 3 channel, RGB, 32 bit samples - new TestData(getClassLoaderResource("/psd/32bit5x5.psd"), new Dimension(5, 5)) + new TestData(getClassLoaderResource("/psd/32bit5x5.psd"), new Dimension(5, 5)), + // 3 channel, RGB, written by GIMP, compressed with PackBits runs longer than the row length + new TestData(getClassLoaderResource("/psd/gimp-32x32-packbits-overflow.psd"), new Dimension(32, 32)) // TODO: Need more recent ZIP compressed PSD files from CS2/CS3+ ); } diff --git a/imageio/imageio-psd/src/test/resources/psd/gimp-32x32-packbits-overflow.psd b/imageio/imageio-psd/src/test/resources/psd/gimp-32x32-packbits-overflow.psd new file mode 100644 index 00000000..81458ca9 Binary files /dev/null and b/imageio/imageio-psd/src/test/resources/psd/gimp-32x32-packbits-overflow.psd differ