You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2015/05/23 13:31:40 UTC

svn commit: r1681325 - in /sling/trunk/contrib/extensions/bgservlets/engine: pom.xml src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java

Author: bdelacretaz
Date: Sat May 23 11:31:39 2015
New Revision: 1681325

URL: http://svn.apache.org/r1681325
Log:
SLING-4740 - URLdecode when filtering query string

Modified:
    sling/trunk/contrib/extensions/bgservlets/engine/pom.xml
    sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java
    sling/trunk/contrib/extensions/bgservlets/engine/src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java

Modified: sling/trunk/contrib/extensions/bgservlets/engine/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/pom.xml?rev=1681325&r1=1681324&r2=1681325&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/bgservlets/engine/pom.xml (original)
+++ sling/trunk/contrib/extensions/bgservlets/engine/pom.xml Sat May 23 11:31:39 2015
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.apache.sling</groupId>
     <artifactId>sling</artifactId>
-    <version>16</version>
+    <version>22</version>
     <relativePath/>
   </parent>
 
@@ -50,7 +50,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.7</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
@@ -94,6 +93,12 @@
       <artifactId>org.apache.sling.commons.testing</artifactId>
       <version>2.0.6</version>
       <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>junit</groupId>
+          <artifactId>junit-dep</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>

Modified: sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java?rev=1681325&r1=1681324&r2=1681325&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java (original)
+++ sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/BackgroundHttpServletRequest.java Sat May 23 11:31:39 2015
@@ -19,10 +19,10 @@
 package org.apache.sling.bgservlets;
 
 import java.io.BufferedReader;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.security.Principal;
 import java.util.Enumeration;
@@ -37,6 +37,7 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import org.apache.sling.api.SlingException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -146,11 +147,17 @@ public class BackgroundHttpServletReques
             return null;
         }
         
+        final String encoding = "UTF-8"; // recommended as per URLDecoder javadocs
         final StringBuilder sb = new StringBuilder(original.length()); 
         final String SEP = "&";
         final String [] params = original.split(SEP);
         for(String param : params) {
-            final String name = param.split("=")[0].trim();
+            String name = null;
+            try {
+                name = URLDecoder.decode(param.split("=")[0].trim(), encoding);
+            } catch(UnsupportedEncodingException uee) {
+                throw new SlingException("Unexpected UnsupportedEncodingException for " + encoding, uee);
+            }
             boolean ignore = false;
             for(String p : parametersToRemove) {
                 if(name.equals(p)) {

Modified: sling/trunk/contrib/extensions/bgservlets/engine/src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java?rev=1681325&r1=1681324&r2=1681325&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/bgservlets/engine/src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java (original)
+++ sling/trunk/contrib/extensions/bgservlets/engine/src/test/java/org/apache/sling/bgservlets/QueryStringFilterTest.java Sat May 23 11:31:39 2015
@@ -18,16 +18,37 @@
  */
 package org.apache.sling.bgservlets;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
-import static org.junit.Assert.assertEquals;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 import org.mockito.Mockito;
 
+@RunWith(Parameterized.class)
 public class QueryStringFilterTest {
 
+    private final String slingBgParamName;
+    
+    @Parameters(name="{0}")
+    public static List<Object[]> data() {
+        final List<Object[]> result = new ArrayList<Object[]>();
+        result.add(new Object[] { "sling:bg" });
+        result.add(new Object[] { "sling%3Abg" });
+        return result;
+    }
+    
+    public QueryStringFilterTest(String slingBgParamName) {
+        this.slingBgParamName = slingBgParamName;
+    }
+    
     private void assertFilter(String [] toRemove, String orig, String expected) {
         final HttpServletRequest mock = Mockito.mock(HttpServletRequest.class);
         Mockito.when(mock.getQueryString()).thenReturn(orig);
@@ -41,8 +62,8 @@ public class QueryStringFilterTest {
     public void testNothingToRemove() {
         final String [] toRemove =  {};
         assertFilter(toRemove, null, null);
-        assertFilter(toRemove, "sling:bg=true", "sling:bg=true&");
-        assertFilter(toRemove, "a=b&sling:bg=true", "a=b&sling:bg=true&");
+        assertFilter(toRemove, slingBgParamName + "=true", slingBgParamName + "=true&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + "=true", "a=b&" + slingBgParamName + "=true&");
         assertFilter(toRemove, "sling:bg=true&c=d", "sling:bg=true&c=d&");
         assertFilter(toRemove, "a=b&sling:bg=true&c=d", "a=b&sling:bg=true&c=d&");
     }
@@ -51,24 +72,24 @@ public class QueryStringFilterTest {
     public void testRemoveOne() {
         final String [] toRemove =  { "sling:bg" };
         assertFilter(toRemove, null, null);
-        assertFilter(toRemove, "sling:bg=true", "");
-        assertFilter(toRemove, "a=b&sling:bg=true", "a=b&");
-        assertFilter(toRemove, "sling:bg=true&c=d", "c=d&");
-        assertFilter(toRemove, "a=b&sling:bg=true&c=d", "a=b&c=d&");
-        assertFilter(toRemove, "a=b&sling:bg = true+with+spaces&c=d", "a=b&c=d&");
+        assertFilter(toRemove, slingBgParamName + "=true", "");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + "=true", "a=b&");
+        assertFilter(toRemove, slingBgParamName + "=true&c=d", "c=d&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + "=true&c=d", "a=b&c=d&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + " = true+with+spaces&c=d", "a=b&c=d&");
     }
     
     @Test 
     public void testRemoveTwo() {
         final String [] toRemove =  { "sling:bg", "some_other_param" };
         assertFilter(toRemove, null, null);
-        assertFilter(toRemove, "sling:bg=true", "");
-        assertFilter(toRemove, "a=b&sling:bg=true", "a=b&");
-        assertFilter(toRemove, "sling:bg=true&c=d", "c=d&");
-        assertFilter(toRemove, "a=b&sling:bg=true&c=d", "a=b&c=d&");
-        assertFilter(toRemove, "a=b&sling:bg = true+with+spaces&c=d", "a=b&c=d&");
-        assertFilter(toRemove, "a=b&sling:bg = true+with+spaces&c=d&some_other_param=foo", "a=b&c=d&");
-        assertFilter(toRemove, "sling:bg=true&some_other_param=foo", "");
-        assertFilter(toRemove, "sling:bg=true&some_other_param=foo&", "");
+        assertFilter(toRemove, slingBgParamName + "=true", "");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + "=true", "a=b&");
+        assertFilter(toRemove, slingBgParamName + "=true&c=d", "c=d&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + "=true&c=d", "a=b&c=d&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + " = true+with+spaces&c=d", "a=b&c=d&");
+        assertFilter(toRemove, "a=b&" + slingBgParamName + " = true+with+spaces&c=d&some_other_param=foo", "a=b&c=d&");
+        assertFilter(toRemove, slingBgParamName + "=true&some_other_param=foo", "");
+        assertFilter(toRemove, slingBgParamName + "=true&some_other_param=foo&", "");
     }
 }