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

Reply via email to