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
+}


Reply via email to