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;
                        }
                }

Reply via email to