<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>you might have seen the media coverage on a Microsoft Windows 10 and Windows Server problem where a certain NTFS internal path causes the Windows driver to claim corruption and mark the filesystem dirty. (Some even reported actual corruption of their filesystems).</div><div><br></div><div>The java.nio Path seems to be resistance against that, as it detects an illegal path itself:</div><div><br></div><div><div>|  Welcome to JShell -- Version 11.0.9.1</div><div>|  For an introduction type: /help intro</div><div><br></div><div>jshell> var bad = "C:\\:$i30:$bitmap";<br></div><div>bad ==> "C:\\:$i30:$bitmap"</div><div><br></div><div>jshell> new File(bad).toPath()</div><div>|  Exception java.nio.file.InvalidPathException: Illegal char <:> at index 3: C:\:$i30:$bitmap</div><div>|        at WindowsPathParser.normalize (WindowsPathParser.java:182)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:153)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:77)</div><div>|        at WindowsPath.parse (WindowsPath.java:92)</div><div>|        at WindowsFileSystem.getPath (WindowsFileSystem.java:229)</div><div>|        at File.toPath (File.java:2292)</div><div>|        at (#6:1)</div><div><br></div><div>jshell> Paths.get(bad)<br></div><div>|  Exception java.nio.file.InvalidPathException: Illegal char <:> at index 3: C:\:$i30:$bitmap</div><div>|        at WindowsPathParser.normalize (WindowsPathParser.java:182)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:153)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:77)</div><div>|        at WindowsPath.parse (WindowsPath.java:92)</div><div>|        at WindowsFileSystem.getPath (WindowsFileSystem.java:229)</div><div>|        at Path.of (Path.java:147)</div><div>|        at Paths.get (Paths.java:69)</div><div>|        at (#7:1)</div><div><br></div><div>jshell> Path.of(bad)</div><div>|  Exception java.nio.file.InvalidPathException: Illegal char <:> at index 3: C:\:$i30:$bitmap</div><div>|        at WindowsPathParser.normalize (WindowsPathParser.java:182)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:153)</div><div>|        at WindowsPathParser.parse (WindowsPathParser.java:77)</div><div>|        at WindowsPath.parse (WindowsPath.java:92)</div><div>|        at WindowsFileSystem.getPath (WindowsFileSystem.java:229)</div><div>|        at Path.of (Path.java:147)</div><div>|        at (#8:1)</div></div><div><br></div><div>(not sure if there is a way to construct a path without that normalization).</div><div><br></div><div>Unfortunally, however, the java.io.File and its IO functions to not provide this protection, when you call</div><div><br></div><div><div>jshell> new File(bad).exists()</div><div>$9 ==> false</div></div><div><br></div><div>(or some other methods accessing the file) you will see the crash message in the event log.</div><div><br></div><div>I am not sure if Java should or could filter that (however since java.nio already does it might be an option, not sure however if Microsoft would be faster and fixing that problem). But I thought I mention this here in case you have Java server applications which derive file names from untrusted user input (including uncompressing ZIP files).</div><div><br></div><div>Gruss</div><div>Bernd</div><div><br></div></div></div></div></div></div>