You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/03/03 10:45:56 UTC

svn commit: r633008 - in /incubator/sling/trunk/sling/servlets-default/src: main/java/org/apache/sling/servlets/RedirectServlet.java test/java/org/apache/sling/servlets/RedirectServletTest.java

Author: fmeschbe
Date: Mon Mar  3 01:45:56 2008
New Revision: 633008

URL: http://svn.apache.org/viewvc?rev=633008&view=rev
Log:
SLING-300 Do not compare the last element of the base path to the
target path to prevent going up to high.

Modified:
    incubator/sling/trunk/sling/servlets-default/src/main/java/org/apache/sling/servlets/RedirectServlet.java
    incubator/sling/trunk/sling/servlets-default/src/test/java/org/apache/sling/servlets/RedirectServletTest.java

Modified: incubator/sling/trunk/sling/servlets-default/src/main/java/org/apache/sling/servlets/RedirectServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlets-default/src/main/java/org/apache/sling/servlets/RedirectServlet.java?rev=633008&r1=633007&r2=633008&view=diff
==============================================================================
--- incubator/sling/trunk/sling/servlets-default/src/main/java/org/apache/sling/servlets/RedirectServlet.java (original)
+++ incubator/sling/trunk/sling/servlets-default/src/main/java/org/apache/sling/servlets/RedirectServlet.java Mon Mar  3 01:45:56 2008
@@ -51,7 +51,7 @@
  * sent where the target is the relative URL from the current resource to the
  * target resource. Selectors, extension, suffix and query string are also
  * appended to the redirect URL.
- *
+ * 
  * @scr.service interface="javax.servlet.Servlet"
  * @scr.component immediate="true" metatype="false"
  * @scr.property name="service.description" value="Request Redirect Servlet"
@@ -139,9 +139,8 @@
             postFix = null;
         }
 
-
         String basePath = request.getResource().getPath();
-        
+
         // make sure the target path is absolute
         if (!targetPath.startsWith("/")) {
             if (!basePath.endsWith("/")) {
@@ -149,7 +148,7 @@
             }
             targetPath = basePath.concat(targetPath);
         }
-        
+
         // append optional selectors etc.to the base path
         if (postFix != null) {
             basePath = basePath.concat(postFix);
@@ -157,7 +156,6 @@
 
         StringBuffer pathBuf = new StringBuffer();
 
-
         makeRelative(pathBuf, basePath, targetPath);
 
         if (postFix != null) {
@@ -183,7 +181,7 @@
 
         // find first non-matching part
         int off;
-        for (off = 0; off < bParts.length && off < tParts.length
+        for (off = 0; off < (bParts.length - 1) && off < tParts.length
             && bParts[off].equals(tParts[off]); off++);
 
         for (int i = bParts.length - off; i > 1; i--) {

Modified: incubator/sling/trunk/sling/servlets-default/src/test/java/org/apache/sling/servlets/RedirectServletTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlets-default/src/test/java/org/apache/sling/servlets/RedirectServletTest.java?rev=633008&r1=633007&r2=633008&view=diff
==============================================================================
--- incubator/sling/trunk/sling/servlets-default/src/test/java/org/apache/sling/servlets/RedirectServletTest.java (original)
+++ incubator/sling/trunk/sling/servlets-default/src/test/java/org/apache/sling/servlets/RedirectServletTest.java Mon Mar  3 01:45:56 2008
@@ -44,6 +44,32 @@
         assertEquals("../x/y", toRedirect(base, target));
     }
 
+    public void testChild() {
+        String base = "/a.html";
+        String target = "/a/b.html";
+        assertEquals("a/b.html", toRedirect(base, target));
+        
+        base = "/a";
+        target = "/a/b.html";
+        assertEquals("a/b.html", toRedirect(base, target));
+
+        base = "/a";
+        target = "/a/b";
+        assertEquals("a/b", toRedirect(base, target));
+        
+        base = "/a.html";
+        target = "/a/b/c.html";
+        assertEquals("a/b/c.html", toRedirect(base, target));
+        
+        base = "/a";
+        target = "/a/b/c.html";
+        assertEquals("a/b/c.html", toRedirect(base, target));
+
+        base = "/a";
+        target = "/a/b/c";
+        assertEquals("a/b/c", toRedirect(base, target));
+    }
+    
     public void testUnCommon() {
         String base = "/a/b/c/d";
         String target = "/w/x/y/z";