You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/08/08 23:15:16 UTC
svn commit: r1155103 - in /myfaces/core/trunk/impl/src:
main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java
Author: lu4242
Date: Mon Aug 8 21:15:15 2011
New Revision: 1155103
URL: http://svn.apache.org/viewvc?rev=1155103&view=rev
Log:
MYFACES-3229 ServletExternalContextImpl.encodeRedirectURL() doesn't handle existing query parameters correctly
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java?rev=1155103&r1=1155102&r2=1155103&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java Mon Aug 8 21:15:15 2011
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
+import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.Principal;
import java.util.ArrayList;
@@ -744,7 +745,15 @@ public final class ServletExternalContex
String[] currentPair = nameValuePairs[i].split(URL_NAME_VALUE_PAIR_SEPERATOR);
ArrayList<String> value = new ArrayList<String>(1);
- value.add(currentPair.length > 1 ? currentPair[1] : "");
+ try
+ {
+ value.add(currentPair.length > 1 ? URLDecoder.decode(currentPair[1], getResponseCharacterEncoding()) : "");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ //shouldn't ever get here
+ throw new UnsupportedOperationException("Encoding type=" + getResponseCharacterEncoding() + " not supported", e);
+ }
paramMap.put(currentPair[0], value);
}
}
Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java?rev=1155103&r1=1155102&r2=1155103&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/context/servlet/ServletExternalContextImplTest.java Mon Aug 8 21:15:15 2011
@@ -111,5 +111,32 @@ public class ServletExternalContextImplT
}
+ @Test
+ public void testEncodedSpaceInExistingQueryParameter()
+ {
+ // the base URL with an existing encoded query parameter
+ String baseUrl = "/test?p1=a+b";
+
+ // encode that URL without adding further parameters
+ final String redirectUrl = _testExternalContext.encodeRedirectURL(baseUrl, null);
+
+ // the URL should not change
+ Assert.assertEquals(baseUrl, redirectUrl);
+
+ }
+
+ @Test
+ public void testEncodedAmpersandInExistingQueryParameter()
+ {
+ // the base URL with an existing encoded query parameter
+ String baseUrl = "/test?p1=a%26b";
+
+ // encode that URL without adding further parameters
+ final String redirectUrl = _testExternalContext.encodeRedirectURL(baseUrl, null);
+
+ // the URL should not change
+ Assert.assertEquals(baseUrl, redirectUrl);
+
+ }
}