Updated Branches: refs/heads/wicket-1.5.x c11892774 -> 1909054ea
WICKET-4387 StringIndexOutOfBoundsException when forwarding requests Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1909054e Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1909054e Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1909054e Branch: refs/heads/wicket-1.5.x Commit: 1909054ea3eaee483578d420e0b8c2a9ecf83ccb Parents: c118927 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Fri May 18 09:48:53 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Fri May 18 09:48:53 2012 +0200 ---------------------------------------------------------------------- .../protocol/http/servlet/ServletWebRequest.java | 5 ++- .../main/java/org/apache/wicket/request/Url.java | 3 +- .../java/org/apache/wicket/request/UrlTest.java | 26 +++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1909054e/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java index e6cf3bd..851d215 100644 --- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java +++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java @@ -199,7 +199,10 @@ public class ServletWebRequest extends WebRequest } final int start = contextPath.length() + filterPrefix.length() + 1; - url.append(uri.substring(start)); + if (uri.length() > start) + { + url.append(uri.substring(start)); + } if (errorAttributes == null) { http://git-wip-us.apache.org/repos/asf/wicket/blob/1909054e/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 35311fe..ecbbd17 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 @@ -158,9 +158,10 @@ public class Url implements Serializable String relativeUrl; // absolute urls contain a scheme:// + final int idxOfFirstSlash = absoluteUrl.indexOf('/'); final int protocolAt = absoluteUrl.indexOf("://"); - if (protocolAt != -1) + if (protocolAt > -1 && (protocolAt < idxOfFirstSlash)) { result.protocol = absoluteUrl.substring(0, protocolAt).toLowerCase(Locale.US); http://git-wip-us.apache.org/repos/asf/wicket/blob/1909054e/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 ded613b..0dbed56 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 @@ -737,4 +737,30 @@ public class UrlTest extends Assert assertEquals(host, copy.getHost()); assertEquals(port, copy.getPort()); } + + /** + * https://issues.apache.org/jira/browse/WICKET-4387 + * Parse uri with '://' in it should consider it as absolute only if there are + * no slashes earlier in the string. + */ + @Test + public void parseHttpSlashSlashColon() + { + // relative + String uri = "/abc/http://host:9090/"; + Url url = Url.parse(uri); + assertEquals(uri, url.toString()); + assertNull(url.getProtocol()); + assertNull(url.getHost()); + assertNull(url.getPort()); + + // absolute + uri = "abchttp://host:9090/"; + url = Url.parse(uri); + assertEquals(uri, url.toString(StringMode.FULL)); + assertEquals("abchttp", url.getProtocol()); + assertEquals("host", url.getHost()); + assertEquals(Integer.valueOf(9090), url.getPort()); + + } }
