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);
+        
+    }
     
 }