From 2f836de5000357db4f1ba5940ee08b957fa43192 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 18 Nov 2016 20:22:58 +0100 Subject: [PATCH] #291 Test case for added leniency for TIFF structures with pointers to data beyond EOF. --- .../imageio/metadata/exif/EXIFReaderTest.java | 27 ++++++++++++++++++ .../test/resources/exif/value-beyond-eof.tif | Bin 0 -> 84 bytes 2 files changed, 27 insertions(+) create mode 100644 imageio/imageio-metadata/src/test/resources/exif/value-beyond-eof.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 2d2468ac..437bb7bc 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 @@ -37,8 +37,11 @@ import org.junit.Test; import javax.imageio.ImageIO; import javax.imageio.stream.ImageInputStream; +import java.io.EOFException; +import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.*; @@ -286,10 +289,34 @@ public class EXIFReaderTest extends MetadataReaderAbstractTest { } } + @Test public void testReadExifWithEmptyTag() throws IOException { try (ImageInputStream stream = ImageIO.createImageInputStream(getResource("/exif/emptyexiftag.tif"))) { CompoundDirectory directory = (CompoundDirectory) createReader().read(stream); assertEquals(3, directory.directoryCount()); } } + + @Test + public void testReadValueBeyondEOF() throws IOException { + ArrayList entries = new ArrayList<>(); + entries.add(new EXIFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, 1, TIFF.TYPE_SHORT)); + entries.add(new EXIFEntry(TIFF.TAG_IMAGE_WIDTH, 10, TIFF.TYPE_SHORT)); + entries.add(new EXIFEntry(TIFF.TAG_IMAGE_HEIGHT, 10, TIFF.TYPE_SHORT)); + entries.add(new EXIFEntry(32934, new byte[10], TIFF.TYPE_UNDEFINED)); + entries.add(new EXIFEntry(32935, 42, TIFF.TYPE_LONG)); + + try (ImageInputStream stream = ImageIO.createImageInputStream(getResource("/exif/value-beyond-eof.tif"))) { + CompoundDirectory directory = (CompoundDirectory) createReader().read(stream); + assertEquals(1, directory.directoryCount()); + assertEquals(5, directory.size()); + + assertEquals(1, directory.getEntryById(TIFF.TAG_PHOTOMETRIC_INTERPRETATION).getValue()); + assertEquals(10, directory.getEntryById(TIFF.TAG_IMAGE_WIDTH).getValue()); + assertEquals(10, directory.getEntryById(TIFF.TAG_IMAGE_HEIGHT).getValue()); + assertEquals(42L, directory.getEntryById(32935).getValue()); + // NOTE: Assumes current implementation, could possibly change in the future. + assertTrue(directory.getEntryById(32934).getValue() instanceof EOFException); + } + } } diff --git a/imageio/imageio-metadata/src/test/resources/exif/value-beyond-eof.tif b/imageio/imageio-metadata/src/test/resources/exif/value-beyond-eof.tif new file mode 100644 index 0000000000000000000000000000000000000000..c3321f3bf3d9cf736c32e6071a94b3d3f66246f8 GIT binary patch literal 84 zcmebEWzb?^U=RXg7+_^&U|8XjsO;4pakF!O+pLoPh