diff --git a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReader.java b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReader.java index 284e45f0..d7ed8ccf 100644 --- a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReader.java +++ b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReader.java @@ -119,7 +119,13 @@ public final class EXIFReader extends MetadataReader { if (readLinked) { if (nextOffset == -1) { - nextOffset = pInput.readUnsignedInt(); + try { + nextOffset = pInput.readUnsignedInt(); + } + catch (EOFException e) { + // catch EOF here as missing EOF marker + nextOffset = 0; + } } // Read linked IFDs diff --git a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReaderTest.java b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReaderTest.java index 1249de6c..d0d6831c 100644 --- a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReaderTest.java +++ b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/exif/EXIFReaderTest.java @@ -276,4 +276,13 @@ public class EXIFReaderTest extends MetadataReaderAbstractTest { assertNotNull(interop); assertEquals(0, interop.size()); } + + @Test + public void testReadExifWithMissingEOFMarker() throws IOException { + ImageInputStream stream = ImageIO.createImageInputStream(getResource("/exif/noeof.tif")); + CompoundDirectory directory = (CompoundDirectory) createReader().read(stream); + assertEquals(15, directory.size()); + assertEquals(1, directory.directoryCount()); + stream.close(); + } } diff --git a/imageio/imageio-metadata/src/test/resources/exif/noeof.tif b/imageio/imageio-metadata/src/test/resources/exif/noeof.tif new file mode 100644 index 00000000..19e68a2d Binary files /dev/null and b/imageio/imageio-metadata/src/test/resources/exif/noeof.tif differ