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