On Tue, 21 Oct 2025 14:54:47 GMT, Brian Burkhalter <[email protected]> wrote:

> Can you do the same for without the patch? Also I think keep links out of the 
> examples for now [...].

The following tables are for `Z:` mapped to `C:\Temp`.

### JDK 23

| pathname | getCanonicalPath | toRealPath |
| :---: | :---: | :---: |
| z:\file.txt | Z:\file.txt | Z:\file.txt |
| z:\notexist.txt | Z:\notexist.txt | java.nio.file.NoSuchFileException 
z:\notexist.txt |
| \\127.0.0.1\z$\temp\file.txt | \\127.0.0.1\z$\temp\file.txt | 
java.nio.file.FileSystemException \\127.0.0.1\z$\temp\file.txt: The network 
name cannot be found |
| \\LOCALHOST\z$\temp\file.txt | \\LOCALHOST\z$\temp\file.txt | 
java.nio.file.FileSystemException \\LOCALHOST\z$\temp\file.txt: The network 
name cannot be found |
| \.\z:\file.txt | \.\z:\file.txt | java.nio.file.InvalidPathException Illegal 
character [:] in path at index 5: \.\z:\file.txt |
| \?\z:\file.txt | Z:\file.txt | Z:\file.txt |
| \.\UNC\LOCALHOST\z$\temp\file.txt | java.io.IOException The filename, 
directory name, or volume label syntax is incorrect | 
java.nio.file.FileSystemException \.\UNC\LOCALHOST\z$\temp\file.txt: The 
filename, directory name, or volume label syntax is incorrect |
| .\file.txt | C:\Temp\file.txt | C:\Temp\file.txt |

### JDK 24

| pathname | getCanonicalPath | toRealPath |
| :---: | :---: | :---: |
| z:\file.txt | \\localhost\c$\Temp\file.txt | Z:\file.txt |
| z:\notexist.txt | Z:\notexist.txt | java.nio.file.NoSuchFileException 
z:\notexist.txt |
| \\127.0.0.1\z$\temp\file.txt | \\127.0.0.1\z$\temp\file.txt | 
java.nio.file.FileSystemException \\127.0.0.1\z$\temp\file.txt: The network 
name cannot be found |
| \\LOCALHOST\z$\temp\file.txt | \\LOCALHOST\z$\temp\file.txt | 
java.nio.file.FileSystemException \\LOCALHOST\z$\temp\file.txt: The network 
name cannot be found |
| \.\z:\file.txt | \\localhost\c$\Temp\file.txt | 
java.nio.file.InvalidPathException Illegal character [:] in path at index 5: 
\.\z:\file.txt |
| \?\z:\file.txt | \\localhost\c$\Temp\file.txt | Z:\file.txt |
| \.\UNC\LOCALHOST\z$\temp\file.txt | java.io.IOException The filename, 
directory name, or volume label syntax is incorrect | 
java.nio.file.FileSystemException \.\UNC\LOCALHOST\z$\temp\file.txt: The 
filename, directory name, or volume label syntax is incorrect |
| .\file.txt | C:\Temp\file.txt | C:\Temp\file.txt |

### Current Patch

| pathname | getCanonicalPath | toRealPath |
| :---: | :---: | :---: |
| z:\file.txt | Z:\file.txt | Z:\file.txt |
| z:\notexist.txt | Z:\notexist.txt | java.nio.file.NoSuchFileException 
z:\notexist.txt |
| \\127.0.0.1\z$\temp\file.txt | \\127.0.0.1\z$\temp\file.txt | 
java.nio.file.FileSystemException \\127.0.0.1\z$\temp\file.txt: The network 
name cannot be found |
| \\LOCALHOST\z$\temp\file.txt | \\LOCALHOST\z$\temp\file.txt | 
java.nio.file.FileSystemException \\LOCALHOST\z$\temp\file.txt: The network 
name cannot be found |
| \.\z:\file.txt | \\localhost\c$\Temp\file.txt | 
java.nio.file.InvalidPathException Illegal character [:] in path at index 5: 
\.\z:\file.txt |
| \?\z:\file.txt | Z:\file.txt | Z:\file.txt |
| \.\UNC\LOCALHOST\z$\temp\file.txt | java.io.IOException The filename, 
directory name, or volume label syntax is incorrect | 
java.nio.file.FileSystemException \.\UNC\LOCALHOST\z$\temp\file.txt: The 
filename, directory name, or volume label syntax is incorrect |
| .\file.txt | C:\Temp\file.txt | C:\Temp\file.txt |

### Differences

The differences among the above tables for the `getCanonicalPath` output are:

| pathname | JDK 23 | JDK 24 | Patch |
| :---: | :---: | :---:| :--- |
| z:\file.txt | Z:\file.txt | \localhost\c$\Temp\file.txt | Z:\file.txt |
| \.\z:\file.txt | \.\z:\file.txt | \localhost\c$\Temp\file.txt | 
\localhost\c$\Temp\file.txt |
| \?\z:\file.txt | Z:\file.txt | \localhost\c$\Temp\file.txt | Z:\file.txt |

The patch brings back two of the cases to JDK 23 behavior, but misses the case 
of `.\z:\file.txt`. This could be due to the prefix `"\\\?\"` being stripped in 
`WinNTFileSystem`, whereas the prefix `"\\\.\"` is not.

Note also that for `z:\notexist.txt`, `getCanonicalPath` returns 
`Z:\notexist.txt`, whereas `toRealPath` always throws `NoSuchFileException`.

The NIO results are, of course, the same for all JDKs versions.

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

PR Comment: https://git.openjdk.org/jdk/pull/27324#issuecomment-3429386112

Reply via email to