[OpenJDK 2D-Dev] Review request for JDK-6967419 : IndexOutOfBoundsException when drawing PNGs

Jayathirth D V jayathirth.d.v at oracle.com
Fri Nov 13 04:11:58 UTC 2015

Hi Phil,


I have added public evaluation in bug. Please review.





From: Philip Race 
Sent: Friday, November 13, 2015 12:11 AM
To: Jayathirth D V
Cc: Prasanta Sadhukhan; 2d-dev at openjdk.java.net
Subject: Re: Review request for JDK-6967419 : IndexOutOfBoundsException when drawing PNGs


Please add a *public* evaluation to the bug report. I will look at it more then ..


On 11/6/15, 2:20 AM, Jayathirth D V wrote: 

Hi Prasanta,


As discussed, only in case of write_IDAT there is finally block which calls ios.finish() which internally calls seek() with improper startPos. In other cases we are not trying to access improper startPos because there is no call to ios.finish(). We can verify this behavior by changing logic where we throw IOException in test case.


And I have modified test to not catch IOBE as per your suggestion. Please find updated Webrev link:


HYPERLINK "http://cr.openjdk.java.net/%7Erchamyal/jay/6967419/webrev.01/"http://cr.openjdk.java.net/~rchamyal/jay/6967419/webrev.01/





From: prasanta sadhukhan 
Sent: Friday, November 06, 2015 2:45 PM
To: Jayathirth D V; HYPERLINK "mailto:2d-dev at openjdk.java.net"2d-dev at openjdk.java.net
Cc: Philip Race
Subject: Re: Review request for JDK-6967419 : IndexOutOfBoundsException when drawing PNGs


Hi Jay,

looks ok but
I guess you need to do the same for finish() method too in similar way you did for finishChunk() as finish() is called from write_IHDR, write_CHRM etc and it calls flushBefore().
Also, I guess you should not consume IOB Exception and let it be thrown to user instead of RuntimeException after catching IOBE.


On 11/5/2015 5:25 PM, Jayathirth D V wrote:

Hello All,


Please review following fix in jdk9:


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


Webrev : HYPERLINK "http://cr.openjdk.java.net/%7Erchamyal/jay/6967419/webrev.00/"http://cr.openjdk.java.net/~rchamyal/jay/6967419/webrev.00/


Bug : IndexOutOfBoundsException when drawing PNGs


Root cause : When user intentionally throws IO Exception while write is happening. 
                          We call ios.finish() in finally block of write_IDAT() which internally goes to finishChunk(). But the startPos of the chunk is still pointing to present IDAT chunk but flushedPos(streamPos) is pointing to end of  IDAT chunk. 
                          So in finishChunk(), startPos will be less than flushedPos. This is causing IndexOutOfBoundException in stream.seek() and cache is not closed.


Solution : If IOException is thrown by user, catch the exception while write is happening and update startPos to streamPos. So that when seek() happens in finishChunk() we don't see IndexOutOfBoundsException and cache is closed properly.





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20151112/147e4bf5/attachment.html>

More information about the 2d-dev mailing list