[OpenJDK 2D-Dev] Review request for JDK-6967419 : IndexOutOfBoundsException when drawing PNGs
philip.race at oracle.com
Thu Nov 12 18:40:34 UTC 2015
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:
> *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.
> 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 :
> 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...
More information about the 2d-dev