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) {
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 @@ final class JrtPath implements Path {
// Remove DotSlash(./) and resolve DotDot (..) components
private String getResolved() {
if (path.length() == 0) {
return path;
}
if (path.indexOf('.') == -1) {
int length = path.length();
if (length == 0 || (path.indexOf("./") == -1 && path.charAt(length - 1) != '.')) {
return path;
} else {
return resolvePath();
}
}
private String resolvePath() {
int length = path.length();
char[] to = new char[length];
int nc = getNameCount();