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@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