Author: damjan
Date: Sat Dec 3 16:38:28 2011
New Revision: 1209945
URL: http://svn.apache.org/viewvc?rev=1209945&view=rev
Log:
TIFF parsing should really be done with unsigned ints.
Unfortunately Java doesn't have those,
and Sanselan doesn't use larger ints and zero-extend.
This means Sanselan can't parse files larger than 2GB,
even though the max is 4GB. Fixing this would take more
work, but for now, at least make FieldType's isLocalValue()
treat length as unsigned, so that corrupt lengths
can be caught and ignored early.
Jira issue key: SANSELAN-53
Modified:
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
Modified:
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
URL:
http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java?rev=1209945&r1=1209944&r2=1209945&view=diff
==============================================================================
---
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
(original)
+++
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
Sat Dec 3 16:38:28 2011
@@ -37,7 +37,12 @@ public abstract class FieldType extends
public boolean isLocalValue(TiffField entry)
{
- return ((length > 0) && ((length * entry.length) <=
TIFF_ENTRY_MAX_VALUE_LENGTH));
+ // FIXME: we should use unsigned ints for offsets and lengths
+ // when parsing TIFF files. But since we don't,
+ // at least make this method treat length as unsigned,
+ // so that corrupt lengths are caught early.
+ long entryLength = 0xffffffffL & entry.length;
+ return ((length > 0) && ((length * entryLength) <=
TIFF_ENTRY_MAX_VALUE_LENGTH));
}
public int getBytesLength(TiffField entry) throws ImageReadException
@@ -110,4 +115,4 @@ public abstract class FieldType extends
public abstract byte[] writeData(Object o, int byteOrder)
throws ImageWriteException;
-}
\ No newline at end of file
+}