Updated Branches: refs/heads/wicket-1.5.x 7b711dcda -> 02f9f08ea
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/02f9f08e Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/02f9f08e Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/02f9f08e Branch: refs/heads/wicket-1.5.x Commit: 02f9f08ea90dfda720ab18f222c36d05d1f5c903 Parents: 7b711dc Author: svenmeier <[email protected]> Authored: Wed Dec 19 20:01:52 2012 +0100 Committer: svenmeier <[email protected]> Committed: Wed Dec 19 20:01:52 2012 +0100 ---------------------------------------------------------------------- .../wicket/request/cycle/UrlRendererTest.java | 28 ++++++++++++++- .../org/apache/wicket/request/UrlRenderer.java | 16 +++++++- 2 files changed, 41 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/02f9f08e/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 6d2ecda..a5f18e3 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 @@ -174,6 +174,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"))); + } + + /** * https://issues.apache.org/jira/browse/WICKET-4514 */ @Test @@ -201,7 +226,8 @@ public class UrlRendererTest extends Assert baseUrl.setPort(8888); UrlRenderer renderer = new UrlRenderer(new MockWebRequest(baseUrl)); renderer.setBaseUrl(baseUrl); // this is needed because MockWebRequest cuts data - String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // url starting with slash is considered absolute + String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // url starting with slash is +// considered absolute assertEquals("http://www.example.com:8888/four", fullUrl); } http://git-wip-us.apache.org/repos/asf/wicket/blob/02f9f08e/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 daa161d..87b2135 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); } @@ -258,16 +258,21 @@ public class UrlRenderer newSegments.addAll(urlSegments); String renderedUrl = new Url(newSegments, url.getQueryParameters()).toString(); + + // sanitize start if (!renderedUrl.startsWith("..")) { // WICKET-4260 renderedUrl = "./" + renderedUrl; } + + // sanitize end if (renderedUrl.endsWith("..")) { // WICKET-4401 renderedUrl = renderedUrl + '/'; } + return renderedUrl; } @@ -289,12 +294,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; } }
