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