Repository: wicket Updated Branches: refs/heads/wicket-6.x 4ee384369 -> 86e49b017
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/86e49b01 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/86e49b01 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/86e49b01 Branch: refs/heads/wicket-6.x Commit: 86e49b017688e73bcd2adf915d3e667a852b13de Parents: 4ee3843 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:45:48 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/86e49b01/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 a795cc1..3a939b9 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/86e49b01/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 bfd7318..a64c60a 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 @@ -1057,5 +1057,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"); + + } }
