Updated Branches:
  refs/heads/master 908dc6f8e -> 961f24776

WICKET-5157 URL query parameter values containing equals sign get cut off


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/961f2477
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/961f2477
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/961f2477

Branch: refs/heads/master
Commit: 961f2477660925a111c581660909c5632d15ef4b
Parents: 908dc6f
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Fri Apr 26 14:57:35 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Fri Apr 26 14:57:35 2013 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/request/Url.java   |    9 +++++----
 .../java/org/apache/wicket/request/UrlTest.java    |   15 +++++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/961f2477/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 6aa6e25..5297857 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
@@ -337,15 +337,16 @@ public class Url implements Serializable
         */
        private static QueryParameter parseQueryParameter(final String qp, 
final Charset charset)
        {
-               if (qp.indexOf('=') == -1)
+               int idxOfEquals = qp.indexOf('=');
+               if (idxOfEquals == -1)
                {
                        // name => empty value
                        return new QueryParameter(decodeParameter(qp, charset), 
"");
                }
 
-               String parts[] = Strings.split(qp, '=');
-               return new QueryParameter(decodeParameter(parts[0], charset), 
decodeParameter(parts[1],
-                       charset));
+               String parameterName = qp.substring(0, idxOfEquals);
+               String parameterValue = qp.substring(idxOfEquals + 1);
+               return new QueryParameter(decodeParameter(parameterName, 
charset), decodeParameter(parameterValue, charset));
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/961f2477/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 9daedf5..49df8de 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
@@ -965,4 +965,19 @@ public class UrlTest extends Assert
                url = Url.parse("/path");
                assertFalse(url.isFull());
        }
+
+       /**
+        * Should accept parameter values containing equals sign(s)
+        * https://issues.apache.org/jira/browse/WICKET-5157
+        */
+       @Test
+       public void parseQueryStringWithEqualsSignInParameterValue()
+       {
+               String s = "/?a=b=c&d=e=f";
+               Url url = Url.parse(s);
+               assertTrue(url.isContextAbsolute());
+               checkSegments(url, "", "");
+               checkQueryParams(url, "a", "b=c", "d", "e=f");
+       }
+
 }

Reply via email to