[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