Browse Source

#50543: decodeUri broken for non-ASCII chars in input.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1055487 13f79535-47bb-0310-9956-ffa450edef68
master
Jesse N. Glick 14 years ago
parent
commit
74fb3d870d
2 changed files with 8 additions and 1 deletions
  1. +4
    -1
      src/main/org/apache/tools/ant/launch/Locator.java
  2. +4
    -0
      src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java

+ 4
- 1
src/main/org/apache/tools/ant/launch/Locator.java View File

@@ -312,8 +312,11 @@ public final class Locator {
sb.write((char) ((i1 << NIBBLE) + i2));
}
}
} else {
} else if (c >= 0x0000 && c < 0x0080) {
sb.write(c);
} else { // #50543
byte[] bytes = String.valueOf(c).getBytes(URI_ENCODING);
sb.write(bytes, 0, bytes.length);
}
}
return sb.toString(URI_ENCODING);


+ 4
- 0
src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java View File

@@ -172,6 +172,10 @@ public class LocatorTest extends TestCase {
char umlauted = result.charAt(1);
assertEquals("expected 0xf6 (\u00f6), but got " + Integer.toHexString(umlauted) + " '"
+ umlauted + "'", 0xf6, umlauted);
assertEquals("file:/tmp/a%C3%A7a%C3%AD%20berry", Locator.encodeURI("file:/tmp/a\u00E7a\u00ED berry"));
assertEquals("file:/tmp/a\u00E7a\u00ED berry", Locator.decodeUri("file:/tmp/a%C3%A7a%C3%AD%20berry"));
assertEquals("file:/tmp/a\u00E7a\u00ED berry", Locator.decodeUri("file:/tmp/a\u00E7a\u00ED%20berry")); // #50543
assertEquals("file:/tmp/hezky \u010Desky", Locator.decodeUri("file:/tmp/hezky%20\u010Desky")); // non-ISO-8859-1 variant
}

public void testOddLowAsciiURI() throws Exception {


Loading…
Cancel
Save