You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2013/08/28 04:05:43 UTC
git commit: JCLOUDS-217: Only decode strings that are actually
encoded. * Update HttpRequestTests to account for change in urlDecode. *
Related to JCLOUDS-200
Updated Branches:
refs/heads/master e6765cc5d -> 12f29fd8a
JCLOUDS-217: Only decode strings that are actually encoded.
* Update HttpRequestTests to account for change in urlDecode.
* Related to JCLOUDS-200
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/12f29fd8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/12f29fd8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/12f29fd8
Branch: refs/heads/master
Commit: 12f29fd8a9e50203acc12ccf794cf73c0abf5703
Parents: e6765cc
Author: Diwaker Gupta <di...@maginatics.com>
Authored: Thu Aug 1 09:44:59 2013 -0700
Committer: Andrew Phillips <an...@apache.org>
Committed: Tue Aug 27 22:03:48 2013 -0400
----------------------------------------------------------------------
.../main/java/org/jclouds/util/Strings2.java | 7 ++++-
.../java/org/jclouds/http/HttpRequestTest.java | 27 +++-----------------
.../java/org/jclouds/util/Strings2Test.java | 7 ++++-
3 files changed, 15 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/12f29fd8/core/src/main/java/org/jclouds/util/Strings2.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/util/Strings2.java b/core/src/main/java/org/jclouds/util/Strings2.java
index c4561ac..d29adf9 100644
--- a/core/src/main/java/org/jclouds/util/Strings2.java
+++ b/core/src/main/java/org/jclouds/util/Strings2.java
@@ -115,8 +115,13 @@ public class Strings2 {
public static String urlDecode(@Nullable String in) {
if (in == null)
return null;
+ String input = in.toString();
+ // Don't double decode
+ if (!isUrlEncoded(input)) {
+ return input;
+ }
try {
- return URLDecoder.decode(in, "UTF-8");
+ return URLDecoder.decode(input, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("Bad encoding on input: " + in, e);
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/12f29fd8/core/src/test/java/org/jclouds/http/HttpRequestTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/http/HttpRequestTest.java b/core/src/test/java/org/jclouds/http/HttpRequestTest.java
index a586547..4004120 100644
--- a/core/src/test/java/org/jclouds/http/HttpRequestTest.java
+++ b/core/src/test/java/org/jclouds/http/HttpRequestTest.java
@@ -67,45 +67,24 @@ public class HttpRequestTest {
.builder().method("GET").endpoint("http://foo").payload(payload).build());
}
- // the following caused issues for the fgcp provider
- // (see RequestAuthenticator#addQueryParamsToRequest)
- // base64 symbols should be url encoded in query param
- // note that + ends up encoded as %20 (space), not %2B (plus)
- public void testAddingBase64EncodedQueryParamCausingPlusToUrlEncodedSpaceConversion() {
- String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- URI uri = URI
- .create("http://goo.com:443?header1=valueWithUrlEncoded%2BPlus");
- HttpRequest request = HttpRequest.builder().method("GET").endpoint(uri)
- // addQueryParam invocation causes %2B's in prev. params to
- // convert to %20.
- .addQueryParam("header2", base64Chars).build();
-
- assertEquals(
- request.getRequestLine(),
- "GET http://goo.com:443?header1=valueWithUrlEncoded%20Plus&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%20/%3D HTTP/1.1");
- }
-
- // note that + ends up encoded as %20 (space) in the first param, %2B (plus)
- // in the last param and %2F converts back into slash
+ // note that + ends up encoded as %2B (plus) and %2F converts back into slash
public void testAddBase64AndUrlEncodedQueryParams() {
String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B%2F%3D";
URI uri = URI.create("http://goo.com:443?header1=" + base64Chars);
HttpRequest request = HttpRequest.builder()
.method("GET")
.endpoint(uri)
- // the addition of another param causes %2B's in prev. params to
- // convert to %20.
.addQueryParam("header2", base64Chars)
.build();
assertEquals(
request.getRequestLine(),
- "GET http://goo.com:443?header1=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%20/%3D&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B/%3D HTTP/1.1");
+ "GET http://goo.com:443?header1=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B/%3D&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B/%3D HTTP/1.1");
}
// base64 symbols with newline separator should be url encoded in query param
public void testAddBase64EncodedQueryParamWithNewlines() {
- String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789%2B/=";
+ String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789+/=";
URI uri = URI.create("http://goo.com:443?header1=value1");
HttpRequest request = HttpRequest.builder().method("GET").endpoint(uri)
.addQueryParam("header2", base64Chars).build();
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/12f29fd8/core/src/test/java/org/jclouds/util/Strings2Test.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/util/Strings2Test.java b/core/src/test/java/org/jclouds/util/Strings2Test.java
index 5b1c9a0..5440699 100644
--- a/core/src/test/java/org/jclouds/util/Strings2Test.java
+++ b/core/src/test/java/org/jclouds/util/Strings2Test.java
@@ -40,7 +40,12 @@ public class Strings2Test {
"/read-tests/%73%6f%6d%65%20%66%69%6c%65");
assertEquals(urlEncode("/read-tests/ tep", '/'), "/read-tests/%20tep");
}
-
+
+ public void testNoDoubleDecode() {
+ assertEquals(urlDecode("foo%20bar%2Bbaz"), "foo bar+baz");
+ assertEquals(urlDecode("foo bar+baz"), "foo bar+baz");
+ }
+
public void testReplaceTokens() {
assertEquals(Strings2.replaceTokens("hello {where}", ImmutableMap.of("where", "world")), "hello world");
}