RFR: 8307105: JFileChooser InvalidPathException when selecting some system folders on Windows [v8]
Alexey Ivanov
aivanov at openjdk.org
Wed May 31 09:08:13 UTC 2023
On Wed, 31 May 2023 06:13:22 GMT, Tejesh R <tr at openjdk.org> wrote:
>> This is a regression from fix [JDK-8281966](https://bugs.openjdk.org/browse/JDK-8281966): Absolute path of symlink is null in JFileChooser. The fix checks whether the file path is a symbolic link using `Files.isSymbolicLink()` method with path as input. In windows for specific folders like "This PC"/"Network"/"Libraries" the path value will be a hex values which causes InvalidPathException. In order to resolve the issue, since no other checks are available to validate the path of these folders, checking if the file is link firstly and then for symbolic link resolves the problem (since File.isLink() doesn't take path as input rather file is a parameter). Since every symbolic link is a link, this fix seems logical to me.
>> The fix is tested in CI for regression and is green. The regression fix is also tested for confirmation and works fine.
>
> Tejesh R has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 10 additional commits since the last revision:
>
> - Merge Master + Updated based on review comments
> - Merge branch 'master' of https://git.openjdk.java.net/jdk into branch_8307105
> - Updated new fix
> - Merge branch 'master' of https://git.openjdk.java.net/jdk into branch_8307105
> - White space fix
> - Alternate Fix
> - Updated based on review comments
> - Updated based on review comments
> - Updated based on review comments
> - Fix + Manual Test
Changes requested by aivanov (Reviewer).
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 861:
> 859: * @implNote Checks only if it is .lnk shortcut link. Other two links
> 860: * namely Symbolic and Junctions returns false, so that the
> 861: * absolute path can be resolved.
Suggestion:
*
* @implNote Returns {@code true} for {@code .lnk} shortcuts only.
* For <i>symbolic links</i> and <i>junctions</i>, it returns
* {@code false} even though {@code IShellFolder} returns
* {@code true} now. It is a workaround for easier handling of
* symbolic links and junctions.
The text may still be imperfect, however I hope, it explains the reasons clearer.
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 868:
> 866: cachedIsLink = hasAttribute(ATTRIB_LINK)
> 867: && (!isFileSystem()
> 868: || getPath().toLowerCase().endsWith(".lnk"));
Suggestion:
cachedIsLink = hasAttribute(ATTRIB_LINK)
&& (!isFileSystem()
|| getPath().toLowerCase().endsWith(".lnk"));
One space less, the first ampersand in `&&` should align with `h` on the line above.
-------------
PR Review: https://git.openjdk.org/jdk/pull/13998#pullrequestreview-1452558817
PR Review Comment: https://git.openjdk.org/jdk/pull/13998#discussion_r1211332971
PR Review Comment: https://git.openjdk.org/jdk/pull/13998#discussion_r1211321342
More information about the client-libs-dev
mailing list