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&", "");
}
}