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 <[email protected]>
Authored: Sat Jan 10 18:30:12 2015 +0100
Committer: Andrea Del Bene <[email protected]>
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");
+               
+       }
 
 }

Reply via email to