Strange "..\" on Windows

Wang Weijun weijun.wang at oracle.com
Sat Oct 24 14:29:25 UTC 2015


I found 2 problems in relativize() of WindowsPath.java:

  401	        // skip matching names
    .... now "i" points to the first non match.
  410	        // append ..\ for remaining names in the base
  411	        StringBuilder result = new StringBuilder();
  412	        for (int j=i; j<bn; j++) {
  413	            result.append("..\\");
  414	        }
  415
  416	        // append remaining names in child
  417	        for (int j=i; j<cn; j++) {
  418	            result.append(other.getName(j).toString());
  419	            result.append("\\");
  420	        }
  421
  422	        // drop trailing slash in result
  423	        result.setLength(result.length()-1);

When calculating "x".relative("y"), line 413 above add "..\\", 414-415 add "y\\", 423 removes the trailing slash, and the final result is "..\\y". Good.

However, if it's only "x".relative(""), it becomes "..\\" + "\\" - "\\", so there is still one trailing slash.

Also, if it's "..".relative("x"), line 413 also add a "..\\". In fact, it should throw an IAE. This explains https://bugs.openjdk.java.net/browse/JDK-8066943.

Thanks
Max


> On Oct 23, 2015, at 5:38 PM, Weijun Wang <weijun.wang at oracle.com> wrote:
> 
> Paths.get("x").relativize(Paths.get("")) returns ..\ on Windows, which is not the same as Paths.get("..\\") (which shows as ..). In fact, its getName(0).toString() is exactly ..\.
> 
> It looks like the \ is not treated as a path separator.
> 
> Also, Paths.get("x/y").relativize(Paths.get("")) returns ..\..\ on Windows, but its getName(0) is .. and getName(1) is ..\
> 
> On Mac, it's all normal.
> 
> Is this a bug?
> 
> Thanks
> Max
> 
> p.s. I run in cygwin of Windows 10.
> 
> 



More information about the nio-dev mailing list