2016-01-13 18:02 GMT+03:00 <ma...@apache.org>: > Author: markt > Date: Wed Jan 13 15:02:00 2016 > New Revision: 1724437 > > URL: http://svn.apache.org/viewvc?rev=1724437&view=rev > Log: > Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58836 > Correctly merge query string parameters when processing a forwarded request > where the target includes a query string that contains a parameter with no > value. > > Modified: > tomcat/tc6.0.x/trunk/ (props changed) > > tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java > tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
> Modified: > tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java > URL: > http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java?rev=1724437&r1=1724436&r2=1724437&view=diff > ============================================================================== > --- > tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java > (original) > +++ > tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationHttpRequest.java > Wed Jan 13 15:02:00 2016 > @@ -37,7 +37,8 @@ import org.apache.catalina.Globals; > import org.apache.catalina.Session; > import org.apache.catalina.Manager; > import org.apache.catalina.util.Enumerator; > -import org.apache.catalina.util.RequestUtil; > +import org.apache.tomcat.util.buf.MessageBytes; > +import org.apache.tomcat.util.http.Parameters; > import org.apache.catalina.util.StringManager; Imports order... > > @@ -864,29 +865,33 @@ class ApplicationHttpRequest extends Htt > if ((queryParamString == null) || (queryParamString.length() < 1)) > return; > > - HashMap queryParameters = new HashMap(); > - String encoding = getCharacterEncoding(); > - if (encoding == null) > - encoding = "ISO-8859-1"; > - try { > - RequestUtil.parseParameters > - (queryParameters, queryParamString, encoding); > - } catch (Exception e) { > - ; > - } > - Iterator keys = parameters.keySet().iterator(); > - while (keys.hasNext()) { > - String key = (String) keys.next(); > - Object value = queryParameters.get(key); > - if (value == null) { > - queryParameters.put(key, parameters.get(key)); > + HashMap<String,String[]> queryParameters = new > HashMap<String,String[]>(); > + > + // Parse the query string from the dispatch target > + Parameters paramParser = new Parameters(); > + MessageBytes queryMB = MessageBytes.newInstance(); > + queryMB.setString(queryParamString); > + paramParser.setQuery(queryMB); > + paramParser.setQueryStringEncoding(getCharacterEncoding()); > + paramParser.handleQueryParameters(); Looking into Parameters.handleQueryParameters() on how it deals with MessageBytes that wraps a String. It calls "data.toBytes()" which uses System Default encoding (see MessageBytes.toBytes() in Tomcat 6 and Tomcat 7, Tomcat 8 onward is different). The RequestUtil.parseParameters() method called by the old code uses the specified encoding. As RequestUtil.parseParameters() method is no longer used, mark it as @Deprecated. > + // Copy the original parameters > + queryParameters.putAll(parameters); > + > + // Insert the additional parameters from the dispatch target > + Enumeration<String> dispParamNames = paramParser.getParameterNames(); > + while (dispParamNames.hasMoreElements()) { > + String dispParamName = dispParamNames.nextElement(); > + String[] dispParamValues = > paramParser.getParameterValues(dispParamName); > + String[] originalValues = queryParameters.get(dispParamName); > + if (originalValues == null) { > + queryParameters.put(dispParamName, dispParamValues); > continue; > } > - queryParameters.put > - (key, mergeValues(value, parameters.get(key))); > + queryParameters.put(dispParamName, mergeValues(dispParamValues, > originalValues)); > } > - parameters = queryParameters; > > + parameters = queryParameters; > } > > > > Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml > URL: > http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1724437&r1=1724436&r2=1724437&view=diff > ============================================================================== > --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) > +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Jan 13 15:02:00 2016 > @@ -107,6 +107,11 @@ > Remove redundant copy of catalina.properties from o.a.c.startup. > Generate this copy during the ant "compile" task. (kkolinko) > </fix> > + <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. (mark) Name typo... > + </fix> > </changelog> > </subsection> > <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org