RFR: 8320692: Null icon returned for .exe without custom icon [v2]

Alexey Ivanov aivanov at openjdk.org
Fri Jan 19 17:52:27 UTC 2024


On Thu, 18 Jan 2024 19:34:11 GMT, Alexander Zuev <kizune at openjdk.org> wrote:

>> src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 1208:
>> 
>>> 1206:             } else {
>>> 1207:                 return new MultiResolutionIconImage(size, multiResolutionIcon);
>>> 1208:             }
>> 
>> Can we return `null` immediately if an icon that we're about to put into `multiResolutionIcon` is `null`?
>> 
>> That is change the line 1198(1195)
>> https://github.com/openjdk/jdk/blob/1640fbb1d4b1bcc5196b0055858403a4bd524359/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java#L1198
>> 
>> to
>> 
>> 
>>     if (newIcon == null) {
>>         return null;
>>     }
>>     multiResolutionIcon.put(s, newIcon);
>> 
>> 
>> I assume if `newIcon == null` then `hIcon` is also `null`, in which case we can move this condition to the line 1195(1192) 
>> 
>> https://github.com/openjdk/jdk/blob/1640fbb1d4b1bcc5196b0055858403a4bd524359/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java#L1195
>> 
>> before calling `makeIcon`.
>
> Ok, i will move it to the line 1198 because i can not guarantee that we do not need to dispose hIcon if we can not make icon out of it so i would rather avoid potential resource leak.

We need to dispose of `hIcon` if it's non-null. I see that in this case `hIcon` is not null yet `makeIcon` fails to get the bitmap for whatever reason.

It would be good to understand why `makeIcon` fails even though `hIcon` is not null.

It is possible that `makeIcon` fails to extract an icon, so the added null-check ensures `null` is returned instead of returning a broken MRI.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17475#discussion_r1459441089


More information about the client-libs-dev mailing list