Browse Source

add'l fixes RE using URI >= Java 1.4: ensure the URI is encoded prior to

passing to URI.create(); ensure no new object is created by encodeUri until
encoding is determined to be necessary.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@357737 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 19 years ago
parent
commit
02d8419021
1 changed files with 17 additions and 7 deletions
  1. +17
    -7
      src/main/org/apache/tools/ant/launch/Locator.java

+ 17
- 7
src/main/org/apache/tools/ant/launch/Locator.java View File

@@ -155,6 +155,11 @@ public final class Locator {
// do that (just "foo.xml" is correct) but for compatibility we special-case
// things when the path is not absolute, and fall back to the old parsing behavior.
if (uriClazz != null && uri.startsWith("file:/")) {
try {
uri = encodeUri(uri);
} catch (UnsupportedEncodingException e) {
//leave as-is?
}
try {
java.lang.reflect.Method createMethod = uriClazz.getMethod("create", new Class[] {String.class});
Object uriObj = createMethod.invoke(null, new Object[] {uri});
@@ -257,25 +262,31 @@ public final class Locator {
int i = 0;
int len = path.length();
int ch = 0;
StringBuffer sb = new StringBuffer(len);
StringBuffer sb = null;
for (; i < len; i++) {
ch = path.charAt(i);
// if it's not an ASCII character, break here, and use UTF-8 encoding
if (ch >= 128)
break;
if (gNeedEscaping[ch]) {
if (sb == null) {
sb = new StringBuffer(path.substring(0, i));
}
sb.append('%');
sb.append(gAfterEscaping1[ch]);
sb.append(gAfterEscaping2[ch]);
// record the fact that it's escaped
}
else {
sb.append((char)ch);
else if (sb != null) {
sb.append((char) ch);
}
}

// we saw some non-ascii character
if (i < len) {
if (sb == null) {
sb = new StringBuffer(path.substring(0, i));
}
// get UTF-8 bytes for the remaining sub-string
byte[] bytes = null;
byte b;
@@ -291,18 +302,17 @@ public final class Locator {
sb.append('%');
sb.append(gHexChs[ch >> 4]);
sb.append(gHexChs[ch & 0xf]);
}
else if (gNeedEscaping[b]) {
} else if (gNeedEscaping[b]) {
sb.append('%');
sb.append(gAfterEscaping1[b]);
sb.append(gAfterEscaping2[b]);
}
else {
sb.append((char)b);
sb.append((char) b);
}
}
}
return sb.toString();
return sb == null ? path : sb.toString();
}

/**


Loading…
Cancel
Save