Test case for offset issue.
@@ -53,8 +53,7 @@ import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
-import java.io.EOFException;
-import java.io.IOException;
+import java.io.*;
import java.util.*;
import java.util.List;
@@ -100,7 +99,6 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader
new TestData(getClassLoaderResource("/jpeg/app-marker-missing-null-term.jpg"), new Dimension(200, 150)),
new TestData(getClassLoaderResource("/jpeg/jfif-16bit-dqt.jpg"), new Dimension(204, 131)),
new TestData(getClassLoaderResource("/jpeg/jfif-grayscale-thumbnail.jpg"), new Dimension(2547, 1537)), // Non-compliant JFIF with 8 bit grayscale thumbnail
- new TestData(getClassLoaderResource("/jpeg/jfif-with-preview-as-second-image.jpg"), new Dimension(3968, 2976), new Dimension(640, 480)), // JFIF, full size + preview
new TestData(getClassLoaderResource("/jpeg-lossless/8_ls.jpg"), new Dimension(800, 535)), // Lossless gray, 8 bit
new TestData(getClassLoaderResource("/jpeg-lossless/16_ls.jpg"), new Dimension(800, 535)), // Lossless gray, 16 bit
new TestData(getClassLoaderResource("/jpeg-lossless/24_ls.jpg"), new Dimension(800, 535)), // Lossless RGB, 8 bit per component (24 bit)
@@ -1807,4 +1805,36 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader
reader.dispose();
}
}
+
+ @Test
+ public void testStreamOffset() throws IOException {
+ // Tests a known issue:
+ // If the JPEGImageReader reads an embedded JPEG stream, we can't assume SOI starts at pos 0,
+ // instead, we'll just assume SOI at the current stream position.
+
+ JPEGImageReader reader = createReader();
+
+ try {
+ // Prepend the data with random padding
+ InputStream input = new SequenceInputStream(new ByteArrayInputStream(new byte[42]),
+ getClass().getResourceAsStream("/jpeg/gray-sample.jpg"));
+
+ ImageInputStream stream = ImageIO.createImageInputStream(input);
+ // Skip padding
+ stream.seek(42);
+
+ reader.setInput(stream);
+
+ assertEquals(386, reader.getWidth(0));
+ assertEquals(396, reader.getHeight(0));
+
+ BufferedImage image = reader.read(0, null);
+
+ assertNotNull(image);
+ assertEquals(386, image.getWidth());
+ assertEquals(396, image.getHeight());
+ } finally {
+ reader.dispose();
+ }
+ }
}
