[OpenJDK 2D-Dev] <AWT Dev> [rfc]Stream doesn't reset mark in finally

Jiri Vanek jvanek at redhat.com
Wed Nov 18 17:17:16 UTC 2015


On 11/12/2015 02:24 PM, Sergey Bylokhov wrote:
> Hi, Jiri.
> This is a valid point, did you file a new CR for this issue?
>

Hello!

here it is:
https://jvanek.fedorapeople.org/oracle/jdk8/webrevs/resetInTryFinally/v1/

Patch:
https://jvanek.fedorapeople.org/oracle/jdk8/webrevs/resetInTryFinally/v1/webrev/
and reprodcuer
https://jvanek.fedorapeople.org/oracle/jdk8/webrevs/resetInTryFinally/v1/MarkTryFinallyReproducer.java


Reproducer can be easily turned to jtreg if wonted.

The patch is for 8, but is valid also for 9, except the path to file.
I will adapt it to 9 once you are ok with it (or you may on your own, depends on you)

J.


> On 09.11.15 15:45, Alexander Scherbatiy wrote:
>> On 11/7/2015 11:38 AM, Jiri Vanek wrote:
>>> Hello!
>>>
>>> Looking to imageIO.java (if this is bad thread, please redirect me!)
>>
>>      2d-dev alias should be also the right place to ask image related
>> questions in AWT.
>>
>>     Thanks,
>>     Alexandr.
>>
>>> when reading images
>>> http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/javax/imageio/ImageIO.java#l543
>>>
>>>
>>> and ending at:
>>>
>>>                 // Perform mark/reset as a defensive measure
>>>                 // even though plug-ins are supposed to take
>>>                 // care of it.
>>>                 boolean canDecode = false;
>>>                 if (stream != null) {
>>>                     stream.mark();
>>>                 }
>>>                 canDecode = spi.canDecodeInput(input);
>>>                 if (stream != null) {
>>>                     stream.reset();
>>>                 }
>>>                 return canDecode;
>>>
>>> I'm wondering, why  stream.reset(); is not in finaly  block:
>>>
>>> // Perform mark/reset as a defensive measure
>>> // even though plug-ins are supposed to take
>>> // care of it.
>>> boolean canDecode = false;
>>> if (stream != null) {
>>> stream.mark();
>>> }
>>> try{
>>>     canDecode = spi.canDecodeInput(input);
>>> } finally {
>>>     if (stream != null) {
>>>         stream.reset();
>>>     }
>>> }
>>> return canDecode;
>>>
>>>
>>> Eg png and bmp decoders can are throwing IIOException when header is
>>> corrutped. That pretty definitely sure killer of  stream mark stacks.
>>> You yourselves write  : //Perform mark/reset as a defensive measure
>>> even though plug-ins are supposed to take care of it.
>>> So if densive, then try/finaly please.
>>>
>>> I did not check if this changed in 9 but if not....Please. This is
>>> makig work on custom image plugins, for image formats which just wraps
>>> another bmp/png and are expecting corrupted headers preatty hards.
>>>
>>>
>>> J.
>>
>
>




More information about the 2d-dev mailing list