You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2013/05/24 19:46:27 UTC
svn commit: r1486134 - in /tomcat/trunk:
java/org/apache/catalina/connector/Request.java
test/org/apache/catalina/connector/TestRequest.java
Author: violetagg
Date: Fri May 24 17:46:27 2013
New Revision: 1486134
URL: http://svn.apache.org/r1486134
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54984
Ensure that the correct encoding will be used when processing the multipart data.
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1486134&r1=1486133&r2=1486134&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Fri May 24 17:46:27 2013
@@ -2629,7 +2629,11 @@ public class Request
try {
String encoding = parameters.getEncoding();
if (encoding == null) {
- encoding = Parameters.DEFAULT_ENCODING;
+ if (enc == null) {
+ encoding = Parameters.DEFAULT_ENCODING;
+ } else {
+ encoding = enc;
+ }
}
value = part.getString(encoding);
} catch (UnsupportedEncodingException uee) {
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=1486134&r1=1486133&r2=1486134&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java Fri May 24 17:46:27 2013
@@ -17,12 +17,17 @@
package org.apache.catalina.connector;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.List;
import java.util.TreeMap;
import javax.servlet.ServletException;
@@ -33,6 +38,7 @@ import javax.servlet.http.HttpServletRes
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import org.junit.Test;
@@ -362,7 +368,7 @@ public class TestRequest extends TomcatB
root.addServletMapping("/", "Bug37794");
tomcat.start();
- HttpURLConnection conn = getConnection();
+ HttpURLConnection conn = getConnection("http://localhost:" + getPort() + "/");
InputStream is = conn.getInputStream();
assertNotNull(is);
}
@@ -376,7 +382,7 @@ public class TestRequest extends TomcatB
root.addServletMapping("/", "Bug37794");
tomcat.start();
- HttpURLConnection conn = getConnection();
+ HttpURLConnection conn = getConnection("http://localhost:" + getPort() + "/");
conn.setChunkedStreamingMode(8 * 1024);
InputStream is = conn.getInputStream();
assertNotNull(is);
@@ -459,6 +465,34 @@ public class TestRequest extends TomcatB
*/
}
+ @Test
+ public void testBug54984() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+ Context root = tomcat.addContext("",
+ System.getProperty("java.io.tmpdir"));
+ root.setAllowCasualMultipartParsing(true);
+ Tomcat.addServlet(root, "Bug54984", new Bug54984Servlet());
+ root.addServletMapping("/", "Bug54984");
+ tomcat.start();
+
+ HttpURLConnection conn = getConnection("http://localhost:" + getPort()
+ + "/parseParametersBeforeParseParts");
+
+ prepareRequestBug54984(conn);
+
+ checkResponseBug54984(conn);
+
+ conn.disconnect();
+
+ conn = getConnection("http://localhost:" + getPort() + "/");
+
+ prepareRequestBug54984(conn);
+
+ checkResponseBug54984(conn);
+
+ conn.disconnect();
+ }
+
/**
*
*/
@@ -577,8 +611,7 @@ public class TestRequest extends TomcatB
}
}
- private HttpURLConnection getConnection() throws IOException {
- final String query = "http://localhost:" + getPort() + "/";
+ private HttpURLConnection getConnection(String query) throws IOException {
URL postURL;
postURL = new URL(query);
HttpURLConnection conn = (HttpURLConnection) postURL.openConnection();
@@ -591,4 +624,74 @@ public class TestRequest extends TomcatB
return conn;
}
+
+ private static class Bug54984Servlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ req.setCharacterEncoding("UTF-8");
+
+ if (req.getRequestURI().endsWith("parseParametersBeforeParseParts")) {
+ req.getParameterNames();
+ }
+
+ req.getPart("part");
+ resp.getWriter().println("Part " + req.getParameter("part"));
+ }
+ }
+
+ private void prepareRequestBug54984(HttpURLConnection conn)
+ throws Exception {
+ String boundary = "-----" + System.currentTimeMillis();
+ conn.setRequestProperty("Content-Type",
+ "multipart/form-data; boundary=" + boundary);
+
+ PrintWriter writer = null;
+ try {
+ writer = new PrintWriter(new OutputStreamWriter(
+ conn.getOutputStream(), "UTF-8"), true);
+ writer.append("--" + boundary).append("\r\n");
+ writer.append("Content-Disposition: form-data; name=\"part\"\r\n");
+ writer.append("Content-Type: text/plain; charset=UTF-8\r\n");
+ writer.append("\r\n");
+ writer.append("äö").append("\r\n");
+ writer.flush();
+
+ writer.append("\r\n");
+ writer.flush();
+
+ writer.append("--" + boundary + "--").append("\r\n");
+ } finally {
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ }
+
+ private void checkResponseBug54984(HttpURLConnection conn)
+ throws Exception {
+ List<String> response = new ArrayList<>();
+ int status = conn.getResponseCode();
+ if (status == HttpURLConnection.HTTP_OK) {
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new InputStreamReader(
+ conn.getInputStream()));
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ response.add(line);
+ }
+ assertTrue(response.contains("Part äö"));
+ } catch (Exception e) {
+ if (reader != null) {
+ reader.close();
+ }
+ }
+ } else {
+ fail("OK status was expected: " + status);
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org