RFR: 8355342: File.getCanonicalPath on Java 24 resolves paths on network drives to UNC format [v4]
Brian Burkhalter
bpb at openjdk.org
Wed Sep 17 23:18:33 UTC 2025
On Wed, 17 Sep 2025 00:32:37 GMT, Brian Burkhalter <bpb at openjdk.org> wrote:
>> `File.getCanonicalPath` invokes `GetFinalPathNameByHandle` on the result of `canonicalize0` which causes the drive letter of a mapped drive to be converted to a UNC prefix. If such a substitution is detected, this request proposes to revert the conversion of drive letter to UNC prefix before returning the canonical path.
>
> Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
>
> 8355342: Corrected a comment
>> Would it be possible to provide a summary as to why we don't run into this with toRealPath?
> In `toRealPath`, the function `GetFinalPathNameByHandle` is not invoked unless links are being followed and a reparse point is encountered.
In this scenario
Directory of Z:\
09/17/2025 03:39 PM <DIR> .
09/17/2025 08:36 AM <SYMLINK> link [target.txt]
09/10/2025 04:41 PM 18 target.txt
where `Z:` is mapped as `net use Z: \\localhost\c$\Temp`, in other words to `C:\Temp`, a similar problem happens with `toRealPath`:
jshell> Path.of("Z:\\target.txt").toRealPath()
$7 ==> Z:\target.txt
jshell> Path.of("Z:\\link").toRealPath()
$8 ==> \\localhost\c$\Temp\target.txt
-------------
PR Comment: https://git.openjdk.org/jdk/pull/27324#issuecomment-3304816136
More information about the core-libs-dev
mailing list