|
|
|
|
@ -48,6 +48,10 @@ public class Handler extends URLStreamHandler {
@@ -48,6 +48,10 @@ public class Handler extends URLStreamHandler {
|
|
|
|
|
|
|
|
|
|
private static final String SEPARATOR = "!/"; |
|
|
|
|
|
|
|
|
|
private static final String CURRENT_DIR = "/./"; |
|
|
|
|
|
|
|
|
|
private static final String PARENT_DIR = "/../"; |
|
|
|
|
|
|
|
|
|
private static final String[] FALLBACK_HANDLERS = { |
|
|
|
|
"sun.net.www.protocol.jar.Handler" }; |
|
|
|
|
|
|
|
|
|
@ -207,6 +211,9 @@ public class Handler extends URLStreamHandler {
@@ -207,6 +211,9 @@ public class Handler extends URLStreamHandler {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String normalize(String file) { |
|
|
|
|
if (!file.contains(CURRENT_DIR) && !file.contains(PARENT_DIR)) { |
|
|
|
|
return file; |
|
|
|
|
} |
|
|
|
|
int afterLastSeparatorIndex = file.lastIndexOf(SEPARATOR) + SEPARATOR.length(); |
|
|
|
|
String afterSeparator = file.substring(afterLastSeparatorIndex); |
|
|
|
|
afterSeparator = replaceParentDir(afterSeparator); |
|
|
|
|
@ -216,7 +223,7 @@ public class Handler extends URLStreamHandler {
@@ -216,7 +223,7 @@ public class Handler extends URLStreamHandler {
|
|
|
|
|
|
|
|
|
|
private String replaceParentDir(String file) { |
|
|
|
|
int parentDirIndex; |
|
|
|
|
while ((parentDirIndex = file.indexOf("/../")) >= 0) { |
|
|
|
|
while ((parentDirIndex = file.indexOf(PARENT_DIR)) >= 0) { |
|
|
|
|
int precedingSlashIndex = file.lastIndexOf('/', parentDirIndex - 1); |
|
|
|
|
if (precedingSlashIndex >= 0) { |
|
|
|
|
file = file.substring(0, precedingSlashIndex) |
|
|
|
|
@ -230,7 +237,7 @@ public class Handler extends URLStreamHandler {
@@ -230,7 +237,7 @@ public class Handler extends URLStreamHandler {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String replaceCurrentDir(String file) { |
|
|
|
|
return file.replace("/./", "/"); |
|
|
|
|
return file.replace(CURRENT_DIR, "/"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|