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

Michael Groß updated IMAGING-167:
---------------------------------
    Fix Version/s: Patch Needed

> Possible infinite loop at XpmImageParser::writeImage(...)
> ---------------------------------------------------------
>
>                 Key: IMAGING-167
>                 URL: https://issues.apache.org/jira/browse/IMAGING-167
>             Project: Commons Imaging
>          Issue Type: Bug
>            Reporter: Michael Groß
>             Fix For: Patch Needed
>
>
> While researching for IMAGING-164 I found the following code at
> org.apache.commons.imaging.formats.xpm.XpmImageParser::writeImage(...)
> {noformat}
> final PaletteFactory paletteFactory = new PaletteFactory();
> ....
> SimplePalette palette = null;
>         int maxColors = WRITE_PALETTE.length;
>         int charsPerPixel = 1;
>         while (palette == null) {
>             palette = paletteFactory.makeExactRgbPaletteSimple(src,
>                     hasTransparency ? maxColors - 1 : maxColors);
>             if (palette == null) {
>                 maxColors *= WRITE_PALETTE.length;
>                 charsPerPixel++;
>             }
>         }
> {noformat}
> The while loop has no exit when *maxColors* or *charsPerPixel* - both int 
> values - overflow. They can overflow because 
> PaletteFactory.makeExactRgbPaletteSimple(...) can return null as found in 
> IMAGING-164.
> As far as I know Java doesn't thows an exception when an int flows over - it 
> just "flips" it so after Integer.MAX_VALUE it goes to Integer.MIN_VALUE. So 
> we would have an infinite loop.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to