Author: cziegeler
Date: Mon Nov 30 13:35:23 2009
New Revision: 885422

URL: http://svn.apache.org/viewvc?rev=885422&view=rev
Log:
SLING-1209 : Fix potential redirection problems.

Modified:
    
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
    
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
    
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
    
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
    sling/trunk/launchpad/bundles/pom.xml

Modified: 
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
 (original)
+++ 
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
 Mon Nov 30 13:35:23 2009
@@ -146,7 +146,7 @@
             postFix = null;
         }
 
-        String basePath = request.getResource().getPath();
+        String basePath = rpi.getResourcePath();
 
         // make sure the target path is absolute
         if (!targetPath.startsWith("/")) {
@@ -163,7 +163,7 @@
 
         StringBuffer pathBuf = new StringBuffer();
 
-        makeRelative(pathBuf, basePath, targetPath);
+        makeRelative(pathBuf, basePath, targetPath, request);
 
         if (postFix != null) {
             pathBuf.append(postFix);
@@ -181,8 +181,17 @@
      * this relative path into pathBuffer.
      */
     private static void makeRelative(StringBuffer pathBuffer, String base,
-            String target) {
-
+            String target, SlingHttpServletRequest request) {
+        if ( base == null || base.length() == 0 ) {
+            final String ctxPath = request.getContextPath();
+            pathBuffer.append(ctxPath);
+            if ( ctxPath.endsWith("/") ) {
+                pathBuffer.append(target.substring(1));
+            } else {
+                pathBuffer.append(target);
+            }
+            return;
+        }
         // pseudo entry to correctly calculate the relative path
         if (base.endsWith("/")) {
             base = base.concat(String.valueOf(Character.MAX_VALUE));

Modified: 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
 (original)
+++ 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
 Mon Nov 30 13:35:23 2009
@@ -28,10 +28,17 @@
 
     private final String suffix;
 
+    private final String path;
+
     public MockRequestPathInfo(String selectors, String extension, String 
suffix) {
+        this(selectors, extension ,suffix, null);
+    }
+
+    public MockRequestPathInfo(String selectors, String extension, String 
suffix, String path) {
         this.selectors = selectors;
         this.extension = extension;
         this.suffix = suffix;
+        this.path = path;
     }
 
     public String getExtension() {
@@ -39,7 +46,7 @@
     }
 
     public String getResourcePath() {
-        return null;
+        return path;
     }
 
     public String getSelectorString() {

Modified: 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
 (original)
+++ 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
 Mon Nov 30 13:35:23 2009
@@ -56,7 +56,15 @@
             String extension, String suffix, String queryString) {
         this.resource = new SyntheticResource(null, resourcePath, null);
         this.requestPathInfo = new MockRequestPathInfo(selectors, extension,
-            suffix);
+            suffix, resourcePath);
+        this.queryString = queryString;
+    }
+
+    public MockSlingHttpServletRequest(String resourcePath, String selectors,
+            String extension, String suffix, String queryString, String 
requestPath) {
+        this.resource = new SyntheticResource(null, resourcePath, null);
+        this.requestPathInfo = new MockRequestPathInfo(selectors, extension,
+            suffix, requestPath);
         this.queryString = queryString;
     }
 
@@ -127,7 +135,7 @@
     }
 
     public String getContextPath() {
-        return null;
+        return "/webapp";
     }
 
     public Cookie[] getCookies() {

Modified: 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
 (original)
+++ 
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
 Mon Nov 30 13:35:23 2009
@@ -21,7 +21,6 @@
 import junit.framework.TestCase;
 
 import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.servlets.get.impl.RedirectServlet;
 
 public class RedirectServletTest extends TestCase {
 
@@ -241,4 +240,15 @@
             basePath, selectors, extension, suffix, queryString);
         return RedirectServlet.toRedirectPath(targetPath, request);
     }
+
+    public void testEmptyPath() {
+        SlingHttpServletRequest request = new MockSlingHttpServletRequest(
+                "/", null, null, null, null, "");
+        String path = RedirectServlet.toRedirectPath("/index.html", request);
+        assertEquals("/webapp/index.html", path);
+        request = new MockSlingHttpServletRequest(
+                "/", null, null, null, null, "/");
+        path = RedirectServlet.toRedirectPath("/index.html", request);
+        assertEquals("index.html", path);
+    }
 }

Modified: sling/trunk/launchpad/bundles/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/launchpad/bundles/pom.xml?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- sling/trunk/launchpad/bundles/pom.xml (original)
+++ sling/trunk/launchpad/bundles/pom.xml Mon Nov 30 13:35:23 2009
@@ -266,7 +266,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlets.get</artifactId>
-            <version>2.0.6</version>
+            <version>2.0.7-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>


Reply via email to