8192892: Improve JrtPath::getResolved fast-path test

8175891: JrtPath::resolve off-by-one pre-sizing cause for memory pressure

Reviewed-by: sundar, jlaskey
This commit is contained in:
Claes Redestad 2017-12-01 17:00:34 +01:00
parent 5d1a0bf421
commit 11a8bac640

View File

@ -274,7 +274,7 @@ final class JrtPath implements Path {
if (o.path.length() == 0) { if (o.path.length() == 0) {
return this; return this;
} }
StringBuilder sb = new StringBuilder(path.length() + o.path.length()); StringBuilder sb = new StringBuilder(path.length() + o.path.length() + 1);
sb.append(path); sb.append(path);
if (path.charAt(path.length() - 1) != '/') if (path.charAt(path.length() - 1) != '/')
sb.append('/'); sb.append('/');
@ -478,12 +478,15 @@ final class JrtPath implements Path {
// Remove DotSlash(./) and resolve DotDot (..) components // Remove DotSlash(./) and resolve DotDot (..) components
private String getResolved() { private String getResolved() {
if (path.length() == 0) { int length = path.length();
return path; if (length == 0 || (path.indexOf("./") == -1 && path.charAt(length - 1) != '.')) {
}
if (path.indexOf('.') == -1) {
return path; return path;
} else {
return resolvePath();
} }
}
private String resolvePath() {
int length = path.length(); int length = path.length();
char[] to = new char[length]; char[] to = new char[length];
int nc = getNameCount(); int nc = getNameCount();