Updated Branches: refs/heads/master b99b68d34 -> 12ce76d17
WICKET-4935 removeCommonPrefix now removes empty leading segments again Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/12ce76d1 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/12ce76d1 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/12ce76d1 Branch: refs/heads/master Commit: 12ce76d17e2d0576fee8158b7fa7db69770bea52 Parents: b99b68d Author: svenmeier <[email protected]> Authored: Wed Dec 19 19:49:48 2012 +0100 Committer: svenmeier <[email protected]> Committed: Wed Dec 19 19:49:48 2012 +0100 ---------------------------------------------------------------------- .../wicket/request/cycle/UrlRendererTest.java | 25 +++++++++++++++ .../org/apache/wicket/request/UrlRenderer.java | 22 ++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/12ce76d1/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java index 3a7fa92..bbb8b26 100644 --- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java @@ -187,6 +187,31 @@ public class UrlRendererTest extends Assert } /** + * WICKET-4935 prevent another double slash + */ + @Test + public void test15() + { + UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("private/AdminPage"))); + + assertEquals("../signIn;jsessionid=16k3wqa9c4sgq1cnp7fisa20u", + r1.renderRelativeUrl(Url.parse("/signIn;jsessionid=16k3wqa9c4sgq1cnp7fisa20u"))); + } + + /** + * prevent another double slash when common prefix is present + */ + @Test + public void test16() + { + UrlRenderer r1 = new UrlRenderer( + new MockWebRequest(Url.parse("private/AdminPage")).setContextPath("context")); + + assertEquals("../signIn;jsessionid=16k3wqa9c4sgq1cnp7fisa20u", + r1.renderRelativeUrl(Url.parse("/context/signIn;jsessionid=16k3wqa9c4sgq1cnp7fisa20u"))); + } + + /** * Verify that absolute urls are rendered as is, ignoring the current client url and base url * completely. * http://git-wip-us.apache.org/repos/asf/wicket/blob/12ce76d1/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java index f58e203..e092957 100644 --- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java @@ -112,7 +112,7 @@ public class UrlRenderer renderedUrl = renderFullUrl(url); } } - else + else { renderedUrl = renderRelativeUrl(url); } @@ -260,14 +260,10 @@ public class UrlRenderer } newSegments.addAll(urlSegments); - // sanitize start String renderedUrl = new Url(newSegments, url.getQueryParameters()).toString(); - if (renderedUrl.startsWith("/")) - { - // WICKET-4920 - renderedUrl = "." + renderedUrl; - } - else if (!renderedUrl.startsWith("..")) + + // sanitize start + if (!renderedUrl.startsWith("..")) { // WICKET-4260 renderedUrl = "./" + renderedUrl; @@ -279,6 +275,7 @@ public class UrlRenderer // WICKET-4401 renderedUrl = renderedUrl + '/'; } + return renderedUrl; } @@ -300,12 +297,19 @@ public class UrlRenderer } Url commonPrefix = Url.parse(request.getContextPath() + request.getFilterPath()); + // if both context and filter path are empty, common prefixes are empty too + if (commonPrefix.getSegments().isEmpty()) + { + // WICKET-4920 and WICKET-4935 + commonPrefix.getSegments().add(""); + } for (int i = 0; i < commonPrefix.getSegments().size() && i < segments.size(); i++) { if (commonPrefix.getSegments().get(i).equals(segments.get(i)) == false) { - LOG.debug("Segments '{}' do not start with common prefix '{}'", segments, commonPrefix); + LOG.debug("Segments '{}' do not start with common prefix '{}'", segments, + commonPrefix); return; } }
