Author: damjan
Date: Thu Jan 26 08:40:20 2012
New Revision: 1236071

URL: http://svn.apache.org/viewvc?rev=1236071&view=rev
Log:
rowsPerStrip is meant to be a 32 bit unsigned integer,
since we store it in an int, and real-world TIFF
files use the value 2^32 - 1, it needs to be
promoted to a long when calculating tile height
with it.


Modified:
    
commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/datareaders/DataReaderStrips.java

Modified: 
commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/datareaders/DataReaderStrips.java
URL: 
http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/datareaders/DataReaderStrips.java?rev=1236071&r1=1236070&r2=1236071&view=diff
==============================================================================
--- 
commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/datareaders/DataReaderStrips.java
 (original)
+++ 
commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/datareaders/DataReaderStrips.java
 Thu Jan 26 08:40:20 2012
@@ -85,17 +85,18 @@ public final class DataReaderStrips exte
     {
         for (int strip = 0; strip < imageData.strips.length; strip++)
         {
-            int rowsRemaining = height - (strip * rowsPerStrip);
-            int rowsInThisStrip = Math.min(rowsRemaining, rowsPerStrip);
-            int pixelsPerStrip = rowsInThisStrip * width;
-            int bytesPerStrip = ((pixelsPerStrip * bitsPerPixel) + 7) / 8;
+            long rowsPerStripLong = 0xFFFFffffL & rowsPerStrip;
+            long rowsRemaining = height - (strip * rowsPerStripLong);
+            long rowsInThisStrip = Math.min(rowsRemaining, rowsPerStripLong);
+            long pixelsPerStrip = rowsInThisStrip * width;
+            long bytesPerStrip = ((pixelsPerStrip * bitsPerPixel) + 7) / 8;
 
             byte compressed[] = imageData.strips[strip].data;
 
             byte decompressed[] = decompress(compressed, compression,
-                    bytesPerStrip, width, rowsInThisStrip);
+                    (int)bytesPerStrip, width, (int)rowsInThisStrip);
 
-            interpretStrip(bi, decompressed, pixelsPerStrip);
+            interpretStrip(bi, decompressed, (int)pixelsPerStrip);
 
         }
     }


Reply via email to