Craig Kelly created IMAGING-88:
----------------------------------

             Summary: Method lowerBound in 
org.apache.commons.imaging.common.itu_t4.T4AndT6Compression has a division error
                 Key: IMAGING-88
                 URL: https://issues.apache.org/jira/browse/IMAGING-88
             Project: Commons Imaging
          Issue Type: Bug
          Components: Format: TIFF
    Affects Versions: 1.0
            Reporter: Craig Kelly


In method lowerBound in the class 
org.apache.commons.imaging.common.itu_t4.T4AndT6Compression, the binary search 
loop uses:

int middle = (first + last) >>> 2;

To find a mid-point for the search.  However, the bit-shift is causing a divide 
by 4.  At best this produces bad results, and at worst causes an infinite loop 
(which is how I found the error). A simple patch to fix is:

Index: 
src/main/java/org/apache/commons/imaging/common/itu_t4/T4AndT6Compression.java
===================================================================
--- 
src/main/java/org/apache/commons/imaging/common/itu_t4/T4AndT6Compression.java  
    (revision 1363019)
+++ 
src/main/java/org/apache/commons/imaging/common/itu_t4/T4AndT6Compression.java  
    (working copy)
@@ -720,7 +720,7 @@
         int first = 0;
         int last = entries.length - 1;
         do {
-            int middle = (first + last) >>> 2;
+            int middle = (first + last) >>> 1; //2;
             if (entries[middle].value.intValue() <= value
                     && ((middle + 1) >= entries.length || value < 
entries[middle + 1].value
                             .intValue())) {


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to