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"); + + } }
