[utilities COMMIT] in /java-support/trunk/src: main/java/net/shibboleth/utilities/java/support/net/UriSupport.java te...

noreply at shibboleth.net noreply at shibboleth.net
Thu Feb 7 00:22:49 EST 2013


Author: putmanb
Date: Thu Feb  7 00:22:49 2013
New Revision: 318

URL: http://svn.shibboleth.net/view/utilities?rev=318&view=rev
Log:
JSPT-20: UriSupport getRawQueryStringParameter is broken on a couple of cases 

Modified:
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/net/UriSupport.java
    java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/net/UriSupportTest.java

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/net/UriSupport.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/net/UriSupport.java?rev=318&r1=317&r2=318&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/net/UriSupport.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/net/UriSupport.java Thu Feb  7 00:22:49 2013
@@ -207,21 +207,21 @@
         }
 
         final String encodedName = urlEncode(trimmedName);
-
-        int index = queryString.indexOf(encodedName);
-        while (index != -1) {
-            // check if this is an valueless parameter at the end of the query string
-            if (index + encodedName.length() == queryString.length()) {
-                return encodedName;
-            }
-
-            // check if the next character after the name is an = or if we've just found another parameter
-            // name that happens to start with the name we're looking for
-            if (queryString.charAt(index++) == '=') {
-                return queryString.substring(index - encodedName.length() - 1, queryString.indexOf("&", index));
-            }
-        }
-
+        
+        // Special case, just a single parameter present
+        if (!trimmedQuery.contains("&")) {
+            if (trimmedQuery.startsWith(encodedName+"=") || trimmedQuery.equals(encodedName)) {
+                return trimmedQuery;
+            }
+        }
+        
+        String[] candidates = trimmedQuery.split("&");
+        for (String candidate : candidates) {
+            if (candidate.startsWith(encodedName+"=") || candidate.equals(encodedName)) {
+                return candidate;
+            }
+        }
+        
         return null;
     }
 

Modified: java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/net/UriSupportTest.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/net/UriSupportTest.java?rev=318&r1=317&r2=318&view=diff
==============================================================================
--- java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/net/UriSupportTest.java (original)
+++ java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/net/UriSupportTest.java Thu Feb  7 00:22:49 2013
@@ -68,6 +68,7 @@
     }
     
     @Test public void testGetRawQueryStringParameter() {
+        // Chad's original java-support tests
         String param = UriSupport.getRawQueryStringParameter(null, null);
         Assert.assertEquals(param, null);
 
@@ -102,6 +103,76 @@
 
         param = UriSupport.getRawQueryStringParameter(queryString, "paramName2");
         Assert.assertEquals(param, "paramName2");
+        
+        // Tests brought in directly from v2 java-openws
+        queryString = "ABC=123&Foo=Bar&XYZ=456";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=Bar");
+        
+        queryString = "Foo=Bar&XYZ=456";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=Bar");
+        
+        queryString = "ABC=123&Foo=Bar";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=Bar");
+        
+        queryString = "Foo=Bar";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=Bar");
+        
+        queryString = "ABC=123&Foo=Bar&XYZ456";
+        param = UriSupport.getRawQueryStringParameter(queryString, "NotThere");
+        Assert.assertNull(param);
+        
+        queryString = "ABC=123&XYZ456";
+        param  = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertNull(param);
+        
+        queryString = null;
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertNull(param);
+        
+        // Brent's new tests
+        queryString = "ABC=123&FooFoo=BarBar&Foo=Bar&XYZ=456";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=Bar");
+        
+        queryString = "ABC=123&Foo=&XYZ=456";
+        param = UriSupport.getRawQueryStringParameter(queryString, "Foo");
+        Assert.assertEquals(param, "Foo=");
+        
+        queryString = "Foo=&ABC=123&XYZ=456";

[... 34 lines stripped ...]


More information about the commits mailing list