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

Reply via email to