Author: kkolinko
Date: Fri Jan 15 12:49:03 2016
New Revision: 1724788
URL: http://svn.apache.org/viewvc?rev=1724788&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58836
Followup. One needs to call queryMB.setCharset() to set encoding for the query
string during parameter merging.
Modified:
tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java
tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java?rev=1724788&r1=1724787&r2=1724788&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java Fri
Jan 15 12:49:03 2016
@@ -20,6 +20,7 @@ package org.apache.catalina.core;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
@@ -39,6 +40,7 @@ import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
+import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.Parameters;
@@ -883,8 +885,20 @@ class ApplicationHttpRequest extends Htt
Parameters paramParser = new Parameters();
MessageBytes queryMB = MessageBytes.newInstance();
queryMB.setString(queryParamString);
+
+ String encoding = getCharacterEncoding();
+ // No need to process null value, as ISO-8859-1 is the default encoding
+ // in MessageBytes.toBytes().
+ if (encoding != null) {
+ try {
+ queryMB.setCharset(B2CConverter.getCharset(encoding));
+ } catch (UnsupportedEncodingException ignored) {
+ // Fall-back to ISO-8859-1
+ }
+ }
+
paramParser.setQuery(queryMB);
- paramParser.setQueryStringEncoding(getCharacterEncoding());
+ paramParser.setQueryStringEncoding(encoding);
paramParser.handleQueryParameters();
// Copy the original parameters
Modified:
tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java?rev=1724788&r1=1724787&r2=1724788&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java
Fri Jan 15 12:49:03 2016
@@ -162,6 +162,19 @@ public class TestApplicationHttpRequest
doQueryStringTest("a=b&c&a=e", "a", expected);
}
+ @Test
+ public void testMergeQueryString05() throws Exception {
+ // https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82
+ // "Test" = "Test"
+ String test = "\u0422\u0435\u0441\u0442";
+ String query = test + "=%D0%A2%D0%B5%D1%81%D1%82";
+
+ Map<String, String[]> expected = new HashMap<>();
+ expected.put("a", new String[] { "b" });
+ expected.put(test, new String[] { test });
+ doQueryStringTest("a=b", query, expected);
+ }
+
private void doQueryStringTest(String originalQueryString, String
forwardQueryString,
Map<String,String[]> expected) throws Exception {
@@ -210,6 +223,7 @@ public class TestApplicationHttpRequest
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
+ req.setCharacterEncoding("UTF-8");
req.getRequestDispatcher(target).forward(req, resp);
}
}
@@ -228,6 +242,7 @@ public class TestApplicationHttpRequest
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
+ req.setCharacterEncoding("UTF-8");
resp.setContentType("text/plain");
resp.setCharacterEncoding("UTF-8");
PrintWriter w = resp.getWriter();
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1724788&r1=1724787&r2=1724788&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Jan 15 12:49:03 2016
@@ -182,7 +182,7 @@
<fix>
<bug>58836</bug>: Correctly merge query string parameters when
processing a forwarded request where the target includes a query string
- that contains a parameter with no value. (markt)
+ that contains a parameter with no value. (markt/kkolinko)
</fix>
</changelog>
</subsection>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]