You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2012/12/04 05:39:12 UTC
svn commit: r1416772 - in /commons/proper/imaging/trunk/src:
changes/changes.xml
main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
Author: damjan
Date: Tue Dec 4 04:39:10 2012
New Revision: 1416772
URL: http://svn.apache.org/viewvc?rev=1416772&view=rev
Log:
Deal with JPEG images with bad block sizes.
Jira issue key: IMAGING-99
Submitted by: st.h <sth at lavabit dot com>
Modified:
commons/proper/imaging/trunk/src/changes/changes.xml
commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
Modified: commons/proper/imaging/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/changes/changes.xml?rev=1416772&r1=1416771&r2=1416772&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/changes/changes.xml (original)
+++ commons/proper/imaging/trunk/src/changes/changes.xml Tue Dec 4 04:39:10 2012
@@ -245,6 +245,9 @@ The <action> type attribute can be add,u
<action issue="IMAGING-90" dev="damjan" type="fix">
Allow non-1 TIFF field lengths when parsing offset fields in non-strict mode.
</action>
+ <action issue="IMAGING-99" dev="damjan" type="fix" due-to="st.h">
+ java.io.IOException: Could not read block
+ </action>
</release>
</body>
Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java?rev=1416772&r1=1416771&r2=1416772&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java Tue Dec 4 04:39:10 2012
@@ -28,6 +28,7 @@ import org.apache.commons.imaging.common
import org.apache.commons.imaging.common.ByteOrder;
import org.apache.commons.imaging.common.bytesource.ByteSource;
import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
+import org.apache.commons.imaging.formats.jpeg.JpegConstants;
import org.apache.commons.imaging.formats.tiff.TiffDirectory.ImageDataElement;
import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
@@ -505,11 +506,16 @@ public class TiffReader extends BinaryFi
ImageDataElement element = directory.getJpegRawImageDataElement();
int offset = element.offset;
int length = element.length;
- // Sony DCR-PC110 has an off-by-one error.
- if (offset + length == byteSource.getLength() + 1) {
- length--;
+ // In case the length is not correct, adjust it and check if the last read byte actually is the end of the image
+ if (offset + length > byteSource.getLength()) {
+ length = (int) byteSource.getLength() - offset;
}
byte data[] = byteSource.getBlock(offset, length);
+ // check if the last read byte is actually the end of the image data
+ if (length < 2 ||
+ (((data[data.length - 2] & 0xff) << 8) | (data[data.length - 1] & 0xff)) != JpegConstants.EOIMarker) {
+ throw new ImageReadException("JPEG EOI marker could not be found at expected location");
+ }
return new JpegImageData(offset, length, data);
}