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

prasanta sadhukhan prasanta.sadhukhan at oracle.com
Wed Nov 11 06:43:26 UTC 2015


Looks ok to me.

Regards
Prasanta
On 11/6/2015 3:50 PM, 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:
>
> http://cr.openjdk.java.net/~rchamyal/jay/6967419/webrev.01/ 
> <http://cr.openjdk.java.net/%7Erchamyal/jay/6967419/webrev.01/>
>
> Thanks,
>
> Jay
>
> *From:*prasanta sadhukhan
> *Sent:* Friday, November 06, 2015 2:45 PM
> *To:* Jayathirth D V; 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.
>
> Regards
> Prasanta
>
> 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 :
>     http://cr.openjdk.java.net/~rchamyal/jay/6967419/webrev.00/
>     <http://cr.openjdk.java.net/%7Erchamyal/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.
>
>     Thanks,
>
>     Jay
>

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


More information about the 2d-dev mailing list