commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Damjan Jovanovic (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (IMAGING-88) Method lowerBound in org.apache.commons.imaging.common.itu_t4.T4AndT6Compression has a division error
Date Sun, 22 Jul 2012 13:07:34 GMT

     [ https://issues.apache.org/jira/browse/IMAGING-88?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Damjan Jovanovic resolved IMAGING-88.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.0

Patch applied to SVN, thank you for your contribution!
                
> 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
>             Fix For: 1.0
>
>
> 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

        

Mime
View raw message