diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index f1ce5f83..bacdcb8d 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -1293,21 +1293,22 @@ public final class TIFFImageReader extends ImageReaderBase { imageInput.seek(stripTileOffsets[0]); if ((short) (imageInput.readByte() << 8 | imageInput.readByte()) == (short) JPEG.SOS) { - int len = 2 + (imageInput.readByte() << 8 | imageInput.readByte()); + processWarningOccurred("Incorrect StripOffsets/TileOffsets, points to SOS marker, ignoring offsets/byte counts."); + int len = 2 + (imageInput.readUnsignedByte() << 8 | imageInput.readUnsignedByte()); stripTileOffsets[0] += len; stripTileByteCounts[0] -= len; } // We'll prepend each tile with a JFIF "header" (SOI...SOS) imageInput.seek(realJPEGOffset); - jpegHeader = new byte[(int) (stripTileOffsets[0] - realJPEGOffset)]; + jpegHeader = new byte[Math.max(0, (int) (stripTileOffsets[0] - realJPEGOffset))]; imageInput.readFully(jpegHeader); } // In case of single tile, make sure we read the entire JFIF stream - if (stripTileByteCounts != null && stripTileByteCounts.length == 1) { - // TODO: Consider issue warning here! - stripTileByteCounts[0] = Math.max(stripTileByteCounts[0], jpegLength); + if (stripTileByteCounts != null && stripTileByteCounts.length == 1 && stripTileByteCounts[0] < jpegLength) { + processWarningOccurred("Incorrect StripByteCounts/TileByteCounts for single tile, using JPEGInterchangeFormatLength instead."); + stripTileByteCounts[0] = jpegLength; } // Read data diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java index 883519e6..b62f838d 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java @@ -308,6 +308,27 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest