From 0997f5199aee8d10330767a8a22f0c7f90a3ad6c Mon Sep 17 00:00:00 2001 From: Oliver Schmidtmer Date: Thu, 28 Jan 2016 20:12:11 +0100 Subject: [PATCH 1/3] catch EOF at reading the next-IFD pointer as EOF marker --- .../twelvemonkeys/imageio/metadata/exif/EXIFReader.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 From a70938182529683f536e16e6a1344a14be168307 Mon Sep 17 00:00:00 2001 From: Oliver Schmidtmer Date: Tue, 2 Feb 2016 00:29:44 +0100 Subject: [PATCH 2/3] Test for catching EOF at reading the next-IFD pointer as EOF marker --- .../imageio/metadata/exif/EXIFReaderTest.java | 7 +++++++ .../src/test/resources/exif/noeof.tif | Bin 0 -> 265 bytes 2 files changed, 7 insertions(+) create mode 100644 imageio/imageio-metadata/src/test/resources/exif/noeof.tif 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..05961b4b 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,11 @@ 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")); + createReader().read(stream); + 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 0000000000000000000000000000000000000000..19e68a2d4c34190fb5f28fceebe3159e91e032e5 GIT binary patch literal 265 zcmebEWzb?^UyANkr_#x4ax>-;zCj*$N3tK vgHZ@cToj2d24#cH7l*57XOuxwqX}k%9LdON$G{4tL2O}0doUa5N(N;BTs#zh literal 0 HcmV?d00001 From d64eb402113e153125e84921a7537b4542483161 Mon Sep 17 00:00:00 2001 From: Oliver Schmidtmer Date: Tue, 16 Feb 2016 23:05:44 +0100 Subject: [PATCH 3/3] Improved test for catching EOF at reading the next-IFD pointer as EOF marker --- .../twelvemonkeys/imageio/metadata/exif/EXIFReaderTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 05961b4b..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 @@ -280,7 +280,9 @@ public class EXIFReaderTest extends MetadataReaderAbstractTest { @Test public void testReadExifWithMissingEOFMarker() throws IOException { ImageInputStream stream = ImageIO.createImageInputStream(getResource("/exif/noeof.tif")); - createReader().read(stream); + CompoundDirectory directory = (CompoundDirectory) createReader().read(stream); + assertEquals(15, directory.size()); + assertEquals(1, directory.directoryCount()); stream.close(); } }