You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2011/11/16 14:43:53 UTC
svn commit: r1202705 - in /tomcat/trunk:
java/org/apache/tomcat/util/http/Parameters.java
test/org/apache/tomcat/util/http/TestParameters.java
Author: kkolinko
Date: Wed Nov 16 13:43:53 2011
New Revision: 1202705
URL: http://svn.apache.org/viewvc?rev=1202705&view=rev
Log:
Parameters.java:
- Fix regression in urldecoding of parameters that contain spaces
Patch by Willem Fibbe
TestParameters.java:
- Improve the test to cover parameters that contain spaces
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestParameters.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java?rev=1202705&r1=1202704&r2=1202705&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java Wed Nov 16 13:43:53 2011
@@ -266,6 +266,7 @@ public final class Parameters {
pos++;
break;
case '%':
+ case '+':
// Decoding required
if (parsingName) {
decodeName = true;
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestParameters.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestParameters.java?rev=1202705&r1=1202704&r2=1202705&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestParameters.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestParameters.java Wed Nov 16 13:43:53 2011
@@ -16,6 +16,8 @@
*/
package org.apache.tomcat.util.http;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.Enumeration;
import static org.junit.Assert.assertArrayEquals;
@@ -24,16 +26,15 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import org.junit.Test;
-import org.apache.tomcat.util.buf.UEncoder;
+import org.junit.Test;
public class TestParameters {
private static final Parameter SIMPLE =
new Parameter("foo1", "bar1");
private static final Parameter SIMPLE_MULTIPLE =
- new Parameter("foo2", "bar1", "bar2");
+ new Parameter("foo2", "bar1", "bar2", "hello world", "?%@");
private static final Parameter NO_VALUE =
new Parameter("foo3");
private static final Parameter EMPTY_VALUE =
@@ -78,7 +79,10 @@ public class TestParameters {
@Test
public void testInternal() {
assertEquals("foo1=bar1", SIMPLE.toString());
- assertEquals("foo2=bar1&foo2=bar2", SIMPLE_MULTIPLE.toString());
+ // Note: testing requires that ' ' is encoded as '+',
+ // because that is what browsers will send us.
+ assertEquals("foo2=bar1&foo2=bar2&foo2=hello+world&foo2=%3F%25%40",
+ SIMPLE_MULTIPLE.toString());
assertEquals("foo3", NO_VALUE.toString());
assertEquals("foo4=", EMPTY_VALUE.toString());
}
@@ -274,7 +278,6 @@ public class TestParameters {
private static class Parameter {
private final String name;
private final String[] values;
- private final UEncoder uencoder = new UEncoder();
public Parameter(String name, String... values) {
this.name = name;
@@ -291,27 +294,30 @@ public class TestParameters {
@Override
public String toString() {
- StringBuilder result = new StringBuilder();
- boolean first = true;
- if (values.length == 0) {
- return uencoder.encodeURL(name);
- }
- for (String value : values) {
- if (first) {
- first = false;
- } else {
- result.append('&');
+ try {
+ StringBuilder result = new StringBuilder();
+ boolean first = true;
+ if (values.length == 0) {
+ return URLEncoder.encode(name, "UTF-8");
}
- if (name != null) {
- result.append(uencoder.encodeURL(name));
- }
- if (value != null) {
- result.append('=');
- result.append(uencoder.encodeURL(value));
+ for (String value : values) {
+ if (first) {
+ first = false;
+ } else {
+ result.append('&');
+ }
+ if (name != null) {
+ result.append(URLEncoder.encode(name, "UTF-8"));
+ }
+ if (value != null) {
+ result.append('=');
+ result.append(URLEncoder.encode(value, "UTF-8"));
+ }
}
+ return result.toString();
+ } catch (UnsupportedEncodingException ex) {
+ return ex.toString();
}
-
- return result.toString();
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org