You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/05/18 09:53:53 UTC
[1/2] git commit: WICKET-4387 StringIndexOutOfBoundsException when
forwarding requests
Updated Branches:
refs/heads/master f71cc7445 -> 84d76255c
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/84d76255
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/84d76255
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/84d76255
Branch: refs/heads/master
Commit: 84d76255ce19369f2379763403c4b89ec66b0d3b
Parents: aac41a9
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri May 18 09:48:53 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri May 18 09:53:32 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/84d76255/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 978c9f1..43eb8d3 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/84d76255/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 8b4a1c4..ea34d67 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
@@ -222,9 +222,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/84d76255/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 4388f67..1ecc9cd 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());
+
+ }
}