[java-support] branch master updated: JSPT-90 Handle edge cases in parameter strings

Rod Widdowson rdw at steadingsoftware.com
Fri Jun 14 12:02:10 EDT 2019


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-support.

View the commit online:
http://git.shibboleth.net/view/?p=java-support.git;a=commit;h=890aefb3f4787747512b183373adf5e0be9e07c4

The following commit(s) were added to refs/heads/master by this push:
       new  890aefb   JSPT-90 Handle edge cases in parameter strings
890aefb is described below

commit 890aefb3f4787747512b183373adf5e0be9e07c4
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Jun 14 11:23:24 2019 +0100

    JSPT-90 Handle edge cases in parameter strings
    
    https://issues.shibboleth.net/jira/browse/JSPT-90
    
    These include
    * nameless values
    * values with (unescaped) "=" in them
    * valueless names (nothing after the "="
    
    The habdling of these is non commutative.
---
 .../utilities/java/support/net/URLBuilder.java     | 23 ++++++++++----------
 .../utilities/java/support/net/URLBuilderTest.java | 25 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/src/main/java/net/shibboleth/utilities/java/support/net/URLBuilder.java b/src/main/java/net/shibboleth/utilities/java/support/net/URLBuilder.java
index cd40616..06173cc 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/net/URLBuilder.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/net/URLBuilder.java
@@ -104,19 +104,20 @@ public class URLBuilder {
         final String queryString = url.getQuery();
         if (!Strings.isNullOrEmpty(queryString)) {
             final String[] queryComps = queryString.split("&");
-            String queryComp;
-            String[] paramComps;
-            String paramName;
-            String paramValue;
-            for (int i = 0; i < queryComps.length; i++) {
-                queryComp = queryComps[i];
-                if (!queryComp.contains("=")) {
-                    paramName = URISupport.doURLDecode(queryComp);
+            for (final String queryComp :queryComps) {
+                final int where = queryComp.indexOf('=');
+                if (where < 0) {
+                    final String paramName = URISupport.doURLDecode(queryComp);
                     queryParams.add(new Pair<String, String>(paramName, null));
                 } else {
-                    paramComps = queryComp.split("=");
-                    paramName = URISupport.doURLDecode(paramComps[0]);
-                    paramValue = URISupport.doURLDecode(paramComps[1]);
+                    String paramName = URISupport.doURLDecode(queryComp.substring(0, where));
+                    if ("".equals(paramName)) {
+                        paramName = null;
+                    }
+                    String paramValue = URISupport.doURLDecode(queryComp.substring(where+1));
+                    if ("".equals(paramValue)) {
+                        paramValue = null;
+                    }
                     queryParams.add(new Pair<>(paramName, paramValue));
                 }
             }
diff --git a/src/test/java/net/shibboleth/utilities/java/support/net/URLBuilderTest.java b/src/test/java/net/shibboleth/utilities/java/support/net/URLBuilderTest.java
index 7f1d77b..c0233da 100644
--- a/src/test/java/net/shibboleth/utilities/java/support/net/URLBuilderTest.java
+++ b/src/test/java/net/shibboleth/utilities/java/support/net/URLBuilderTest.java
@@ -19,6 +19,7 @@ package net.shibboleth.utilities.java.support.net;
 
 import java.net.MalformedURLException;
 
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.net.URLBuilder;
 
 import org.testng.annotations.Test;
@@ -90,6 +91,30 @@ public class URLBuilderTest {
     }
     
     /**
+     * Test with some odd values.
+     * @throws MalformedURLException 
+     */
+    @Test
+    public void testValues() throws MalformedURLException{
+        String url = "http://www.example.com:/index.html?=value1&attrib2=&attrib3=val3=val3b";
+        URLBuilder builder1 = new URLBuilder(url);
+        Assert.assertEquals(builder1.getScheme(), "http");
+        Assert.assertEquals(builder1.getUsername(), null);
+        Assert.assertEquals(builder1.getPassword(), null);
+        Assert.assertEquals(builder1.getHost(), "www.example.com");
+        Assert.assertEquals(builder1.getQueryParams().size(), 3);
+        Assert.assertEquals(builder1.getQueryParams().get(0), new Pair((String)null, "value1"));
+        Assert.assertEquals(builder1.getQueryParams().get(1), new Pair("attrib2", (String)null));
+        Assert.assertEquals(builder1.getQueryParams().get(2), new Pair("attrib3", "val3=val3b"));
+        Assert.assertEquals(builder1.getFragment(), null);
+        
+        // NOTE that we drop the name-less value and properly encode the third value 
+        
+        Assert.assertEquals(builder1.buildURL(), "http://www.example.com:/index.html?attrib2&attrib3=val3%3Dval3b");
+    }
+
+    
+    /**
      * Test with scheme, host, and fragment.
      * @throws MalformedURLException 
      */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list