diff -r 3d4bd4d33a67 -r a9160acae595 src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java --- a/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java Fri Dec 01 05:27:44 2017 +0000 +++ b/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java Fri Dec 01 17:00:34 2017 +0100 @@ -274,7 +274,7 @@ if (o.path.length() == 0) { return this; } - StringBuilder sb = new StringBuilder(path.length() + o.path.length()); + StringBuilder sb = new StringBuilder(path.length() + o.path.length() + 1); sb.append(path); if (path.charAt(path.length() - 1) != '/') sb.append('/'); @@ -478,12 +478,15 @@ // Remove DotSlash(./) and resolve DotDot (..) components private String getResolved() { - if (path.length() == 0) { + int length = path.length(); + if (length == 0 || (path.indexOf("./") == -1 && path.charAt(length - 1) != '.')) { return path; + } else { + return resolvePath(); } - if (path.indexOf('.') == -1) { - return path; - } + } + + private String resolvePath() { int length = path.length(); char[] to = new char[length]; int nc = getNameCount();