From ee1f1643b1df98a3d2f41baf2274580144eb5d77 Mon Sep 17 00:00:00 2001 From: Andreas Koenig Date: Fri, 16 Mar 2012 08:32:01 +0100 Subject: [PATCH 1/2] implemented handling of ipv6 addresses in urls --- .../springframework/web/util/UriUtilsTests.java | 14 ++++++++++++++ .../springframework/web/util/UriComponents.java | 4 ++++ .../web/util/UriComponentsBuilder.java | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-android-rest-template-test/src/main/java/org/springframework/web/util/UriUtilsTests.java b/spring-android-rest-template-test/src/main/java/org/springframework/web/util/UriUtilsTests.java index da365995..3810de70 100644 --- a/spring-android-rest-template-test/src/main/java/org/springframework/web/util/UriUtilsTests.java +++ b/spring-android-rest-template-test/src/main/java/org/springframework/web/util/UriUtilsTests.java @@ -45,6 +45,8 @@ public void testEncodeUserInfo() throws UnsupportedEncodingException { public void testEncodeHost() throws UnsupportedEncodingException { assertEquals("Invalid encoded result", "foobar", UriUtils.encodeHost("foobar", ENC)); assertEquals("Invalid encoded result", "foo%20bar", UriUtils.encodeHost("foo bar", ENC)); + assertEquals("Invalid encoded result", "[::1]", UriUtils.encodeHost("[::1]", ENC)); + assertEquals("Invalid encoded result", "[fe80::a2cf:33ff:fee2:124f]", UriUtils.encodeHost("[fe80::a2cf:33ff:fee2:124f]", ENC)); } @SmallTest @@ -131,6 +133,12 @@ public void testEncodeUri() throws UnsupportedEncodingException { assertEquals("Invalid encoded URI", "file:///~/calendar", UriUtils.encodeUri("file:///~/calendar", ENC)); assertEquals("Invalid encoded URI", "http://example.com/query=foo@bar", UriUtils.encodeUri("http://example.com/query=foo@bar", ENC)); + assertEquals("Invalid encoded URI", "http://[::1]/rest.xml", + UriUtils.encodeUri("http://[::1]/rest.xml", ENC)); + assertEquals("Invalid encoded URI", "http://[::1]:8080/rest.xml", + UriUtils.encodeUri("http://[::1]:8080/rest.xml", ENC)); + assertEquals("Invalid encoded URI", "http://[fe80::a2cf:33ff:fee2:124f]:8080/rest.xml", + UriUtils.encodeUri("http://[fe80::a2cf:33ff:fee2:124f]:8080/rest.xml", ENC)); } @@ -154,6 +162,12 @@ public void testEncodeHttpUrl() throws UnsupportedEncodingException { UriUtils.encodeHttpUrl("http://java.sun.com/j2se/1.3/", ENC)); assertEquals("Invalid encoded HTTP URL", "http://example.com/query=foo@bar", UriUtils.encodeHttpUrl("http://example.com/query=foo@bar", ENC)); + assertEquals("Invalid encoded HTTP URL", "http://[::1]/rest.xml", + UriUtils.encodeHttpUrl("http://[::1]/rest.xml", ENC)); + assertEquals("Invalid encoded HTTP URL", "http://[::1]:8080/rest.xml", + UriUtils.encodeHttpUrl("http://[::1]:8080/rest.xml", ENC)); + assertEquals("Invalid encoded HTTP URL", "http://[fe80::a2cf:33ff:fee2:124f]:8080/rest.xml", + UriUtils.encodeHttpUrl("http://[fe80::a2cf:33ff:fee2:124f]:8080/rest.xml", ENC)); } @SmallTest diff --git a/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponents.java b/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponents.java index 695f6cef..9029a953 100644 --- a/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponents.java +++ b/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponents.java @@ -273,6 +273,10 @@ static String encodeUriComponent(String source, String encoding, Type type) thro } Assert.hasLength(encoding, "'encoding' must not be empty"); + + // do not encode ipv6-hostnames like [::1] + if(type==Type.HOST && source.startsWith("[") && source.endsWith("]")) + return source; byte[] bytes = encodeBytes(source.getBytes(encoding), type); return new String(bytes, "US-ASCII"); diff --git a/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index 7a4bb517..fd19f64a 100644 --- a/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-android-rest-template/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -59,7 +59,7 @@ public class UriComponentsBuilder { private static final String USERINFO_PATTERN = "([^@/]*)"; - private static final String HOST_PATTERN = "([^/?#:]*)"; + private static final String HOST_PATTERN = "(\\[[:0-9a-f]*\\]|[^/?#:\\[\\]]*)"; private static final String PORT_PATTERN = "(\\d*)"; From f2579c08df40a0ec75058f1aa04cb30b4f302699 Mon Sep 17 00:00:00 2001 From: akoenig Date: Sat, 10 Nov 2012 20:31:54 +0100 Subject: [PATCH 2/2] made dummy-version for fixing ipv6-troubles --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1c7ff0f6..ade263a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=1.0.1.BUILD-SNAPSHOT +version=1.0.1.BUILD-KOA