<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hello All,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please review the following fix in JDK :<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Bug : <a href="https://bugs.openjdk.java.net/browse/JDK-8191174">https://bugs.openjdk.java.net/browse/JDK-8191174</a> <o:p></o:p></p><p class=MsoNormal>Webrev : <a href="http://cr.openjdk.java.net/~jdv/8191174/webrev.00/">http://cr.openjdk.java.net/~jdv/8191174/webrev.00/</a> <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Issue : When we try to read PNG image with large width we throw undocumented IllegalArgumentException with message "Pixel stride times width must be less than or equal to the scanline stride".<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Exception in thread "main" java.lang.IllegalArgumentException: Pixel stride times width must be less than or equal to the scanline stride<o:p></o:p></p><p class=MsoNormal>                at java.desktop/java.awt.image.PixelInterleavedSampleModel.<init>(PixelInterleavedSampleModel.java:101)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/java.awt.image.Raster.createInterleavedRaster(Raster.java:642)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.createRaster(PNGImageReader.java:974)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.decodePass(PNGImageReader.java:1099)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.decodeImage(PNGImageReader.java:1295)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1420)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1699)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1468)<o:p></o:p></p><p class=MsoNormal>                at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1363)<o:p></o:p></p><p class=MsoNormal>                at PngReaderLargeWidthStrideTest.main(PngReaderLargeWidthStrideTest.java:50)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Root cause : We use large width present in IHDR and calculate elements per row which is passed as scanlinestride for creating the required raster and its corresponding sample model.  When the call reaches creation of PixelInterleavedSampleModel it checks the condition of (pixelStride * w) > scanlineStride. Since in our case we pass this condition it throws IllegalArgumentException. We have invalid scanlineStride value because when we calculate elements per row/bytes per row value in PNGImageReader the integer variable buffer is overflowed and we maintain invalid value for bytesPerRow.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Solution : We can maintain the intermediate <b>bits</b>PerRow value in long datatype and calculate bytesPerRow using the long value and then typecast it to int bytesPerRow variable. By doing this we will maintain the required scanlineStride/eltsPerRow value properly. After this solution we will throw proper IIOException because of changes present in <a href="https://bugs.openjdk.java.net/browse/JDK-8190332">JDK-8190332</a> and not the undocumented IllegalArgumentException.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>Jay<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>