You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/01/10 18:44:09 UTC

wicket git commit: WICKET-5809 URL IPv6 parsing

Repository: wicket
Updated Branches:
  refs/heads/master bfc7cfe39 -> b1f4e6a34


WICKET-5809 URL IPv6 parsing

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b1f4e6a3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b1f4e6a3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b1f4e6a3

Branch: refs/heads/master
Commit: b1f4e6a3444dab7869a26ce7914e4faaabd50462
Parents: bfc7cfe
Author: Andrea Del Bene <ad...@apache.org>
Authored: Sat Jan 10 18:30:12 2015 +0100
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Sat Jan 10 18:30:12 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/wicket/request/Url.java     | 12 +++++++---
 .../java/org/apache/wicket/request/UrlTest.java | 24 ++++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b1f4e6a3/wicket-request/src/main/java/org/apache/wicket/request/Url.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
index 9d5b401..be49640 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
@@ -290,7 +290,11 @@ public class Url implements Serializable
 			}
 
 			final int credentialsAt = hostAndPort.lastIndexOf('@') + 1;
-			final int portAt = hostAndPort.substring(credentialsAt).lastIndexOf(':');
+			//square brackets are used for ip6 URLs
+			final int closeSqrBracketAt = hostAndPort.lastIndexOf(']') + 1;
+			final int portAt = hostAndPort.substring(credentialsAt)
+										  .substring(closeSqrBracketAt)
+									      .lastIndexOf(':');
 
 			if (portAt == -1)
 			{
@@ -299,8 +303,10 @@ public class Url implements Serializable
 			}
 			else
 			{
-				result.host = hostAndPort.substring(0, portAt + credentialsAt);
-				result.port = Integer.parseInt(hostAndPort.substring(portAt + credentialsAt + 1));
+				final int portOffset = portAt + credentialsAt + closeSqrBracketAt;
+				
+				result.host = hostAndPort.substring(0, portOffset);
+				result.port = Integer.parseInt(hostAndPort.substring(portOffset + 1));
 			}
 
 			if (relativeAt < 0)

http://git-wip-us.apache.org/repos/asf/wicket/blob/b1f4e6a3/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
index 3102baf..75db0d6 100644
--- a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
+++ b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
@@ -1075,5 +1075,29 @@ public class UrlTest extends Assert
 		checkSegments(url, "", "");
 		checkQueryParams(url, "a", "b=c", "d", "e=f");
 	}
+	
+	/**
+	 * Parse IP6 addresses (https://www.ietf.org/rfc/rfc2732.txt)
+	 * 
+	 * https://issues.apache.org/jira/browse/WICKET-5809
+	 */
+	@Test
+	public void parseIp6Address()
+	{
+		String s = "https://[::1]/myapp";
+		Url url = Url.parse(s);
+		
+		assertTrue(url.isFull());
+		checkUrl(url, "https", "[::1]", 443, "", "myapp");
+		
+		//now with port in URL
+		s = "http://[::1]:1234/myapp";
+		
+		url = Url.parse(s);
+		
+		assertTrue(url.isFull());
+		checkUrl(url, "http", "[::1]", 1234, "", "myapp");
+		
+	}
 
 }