Hi,

 

Thanks for the review Phil and Prahalad.

 

Based on the suggestions I have updated the code to wrap underlying 
Exception/Error in IIOException instead of overriding the message content and 
removed the check for IndexOutOfBoundsException.

Corresponding test case changes are also done.

 

Please find updated webrev for review:

http://cr.openjdk.java.net/~jdv/8190332/webrev.01/ 

 

Thanks,

Jay

 

From: Phil Race 
Sent: Tuesday, November 14, 2017 12:06 AM
To: Jayathirth D V; 2d-dev
Subject: Re: [OpenJDK 2D-Dev] [10] RFR JDK-8190332: PngReader throws 
NegativeArraySizeException/OOM error when IHDR width is very large

 

1676                  IndexOutOfBoundsException |
 
 
IndexOutOfBoundsException is a specified exception but as such is thrown 
outside this try block
 
so I think you should not re-throw it here but should let it be handled by the 
block below.
 
  throw new IIOException("BufferOverflow/OOM while reading"
1683                     + " the image");
 
Whilst that's the issue here I think this message will look quite odd
if what we actually had thrown is something like ClassCastException so
I think you should leave it to the underlying exception to report the issue.
 
Also I had said to wrap the original exception, so what I expected was
 
throw new IIOException("Caught exception during read: ", e);
 
-phil.

 

On 11/13/2017 01:23 AM, Jayathirth D V wrote:

Hello All,

 

Please review the following fix in JDK10 :

 

Bug : https://bugs.openjdk.java.net/browse/JDK-8190332 

Webrev : HYPERLINK 
"http://cr.openjdk.java.net/%7Ejdv/8190332/webrev.00/"http://cr.openjdk.java.net/~jdv/8190332/webrev.00/
 

 

Issue : 

Two types of issues are fixed under the same solution, so HYPERLINK 
"https://bugs.openjdk.java.net/browse/JDK-8190511"JDK-8190511 is closed as 
duplicate of this issue.

1) PNGImageReader throws OOM error when IHDR width equals/or greater than VM's 
array size limit.

2) PNGImageReader throws NegativeArraySizeException when IHDR width value is 
very high.

 

Root cause : 

1)      VM doesn't allow creation of array with Size >= ((2 to the power of 31) 
- 2) so we throw OOM error.

2)      We use width from IHDR to calculate needed "bytesPerRow" value as 
"(inputBands*passWidth*bitDepth + 7)/8". When IHDR width is very high we 
overflow the integer size of bytesPerRow and when we try to create array using 
bytesPerRow it throws NegativeArraySizeException.

 

Solution :

According to PNG spec maximum value that can be stored in IHDR width/height is 
(2 to the power of 31). We can't support PNG images with so large height/width, 
because based on other parameters like inputsBands, bitDepth we will definitely 
          overflow than the maximum buffer value of VM. Also PNG is not a 
preferred format for such kind of large images.

                Instead of catching these OOMError/NegativeArraySizeException 
at many different levels in PNGImageReader we can catch Throwable at higher 
level and convert OOMError/ NegativeArraySizeException into IIOException.

 

Thanks,

Jay

 

 

Reply via email to