From 74fb3d870dc2bb95466ba7672eb63ff3d106ad96 Mon Sep 17 00:00:00 2001 From: "Jesse N. Glick" Date: Wed, 5 Jan 2011 15:17:59 +0000 Subject: [PATCH] #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 --- src/main/org/apache/tools/ant/launch/Locator.java | 5 ++++- src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/org/apache/tools/ant/launch/Locator.java b/src/main/org/apache/tools/ant/launch/Locator.java index eb3efe995..62a9b7692 100644 --- a/src/main/org/apache/tools/ant/launch/Locator.java +++ b/src/main/org/apache/tools/ant/launch/Locator.java @@ -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); diff --git a/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java b/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java index 8191a061f..51de06139 100644 --- a/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java +++ b/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java @@ -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 {