Hi Sergey/Alexey
Webrev: http://cr.openjdk.java.net/~pbansal/8230235/webrev01/
<< I guess that the problem is that the "image" is accessed w/o synchronization
on "this" like in other places, but it will be necessary to add one null check
before usage of "image".
I have updated the code to access image with synchronization. But that does not
solve the issue. So I have kept the null check also. I tried to add the null
check before calling getWidth, calling getWidth still makes the image null. So
the check before calling getHeight is still required.
<<This requires a comment, doesn't it? Otherwise the condition in if looks
always true. Is it possible that image becomes null before getWidth() is called?
I have added the comment. I don't see a case where image is null before calling
getWidth, so did not add a null check there.
<< I agree with Sergey, try-catch are not necessary in this case: you declared
that main throws Exception. Any exception indicates the test failed.
<<Since JLabel is a Swing component, you should create its instance on EDT.
SwingUtilities.invokeAndWait would do the job.
Done
Regards,
Pankaj
-----Original Message-----
From: Alexey Ivanov
Sent: Wednesday, October 16, 2019 7:27 PM
To: Pankaj Bansal; swing-dev
Cc: Sergey Bylokhov
Subject: Re: <Swing Dev> [14] RFR JDK-8230235 - Rendering HTML with empty img
attribute and documentBaseKey cause Exception
Hi Pankaj,
I'd like to confirm:
793 int width = image.getWidth(imageObserver);
794 if (image != null) {
the image is not null at line 793, and as the side effect of calling
image.getWidth(imageObserver), image is set to null, right?
This requires a comment, doesn't it? Otherwise the condition in if looks always
true. Is it possible that image becomes null before getWidth() is called?
Can we implement this differently?
I guess we'll also get NPE if src attribute of <image> tag is not an image.
I agree with Sergey, try-catch are not necessary in this case: you declared
that main throws Exception. Any exception indicates the test failed.
Since JLabel is a Swing component, you should create its instance on EDT.
SwingUtilities.invokeAndWait would do the job.
Regards,
Alexey
On 10/10/2019 21:35, Sergey Bylokhov wrote:
> Hi, Pankaj.
> I guess that the problem is that the "image" is accessed w/o
> synchronization on "this"
> like in other places, but it will be necessary to add one null check
> before usage of "image".
> Also, it is not necessary to have a try/catch block in the test, just
> call the problematic method
>
> On 10/10/19 11:01 am, Pankaj Bansal wrote:
>> Hi All,
>>
>> Please review the following fix for jdk14.
>>
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8230235
>>
>> Webrev: http://cr.openjdk.java.net/~pbansal/8230235/webrev00/
>>
>> Issue:
>>
>> Rendering HTML with empty img attribute and documentBaseKey set
>> causes NPE
>>
>> Fix:
>>
>> The issues is introduced after
>> https://bugs.openjdk.java.net/browse/JDK-8218674.
>>
>> When the documentBaseKey is set, but img tag is not set, the image
>> URL may not be complete and may not point to actual image. In
>> ImageView class, when getWidth(ImageObserver) is called from the
>> updateImageSize, it checks if image source is null and adds the
>> ImageObserver (ImageView.ImageHandler) on the Image and sets the
>> ImageView image as null. When getHeight is called, as image is set to
>> null, it results in NPE.
>>
>> We should verify that image is not null.
>>
>> Testing:
>>
>> I have tested it on Window, Linux and Mac.
>>
>>
>> Regards,
>> Pankaj Bansal
>>
>
>