On 14/01/2016 13:07, Konstantin Kolinko wrote:
> 2016-01-14 11:43 GMT+03:00 Mark Thomas <ma...@apache.org>:
>> On 14/01/2016 03:08, Konstantin Kolinko wrote:
>>> 2016-01-13 18:02 GMT+03:00  <ma...@apache.org>:
>>>> Author: markt
>>>> Date: Wed Jan 13 15:02:00 2016
>>>> New Revision: 1724437
>>
>>> 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.
>>
>> Nice catch. Fixed.
> 
> The hard part (backporting MessageBytes charset support) - done.
> 
> The easy part - setting the charset on MessageBytes - not yet.
> 
> Setting charset on MessageBytes queryMB won't help.  In
> paramParser.handleQueryParameters(); it is copied and that does not
> inherit the charset:

I've fixed that. Looking at where MessageBytes.duplicate() is used,
mostly it won't matter but there are a few places - mainly parameter
processing - where it could have an impact so fixing the issue at source
seemed like the best option.

>> decodedQuery.duplicate( queryMB );
> 
> 
> Also the following block:
> +            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));
> 
> The mergeValues() method arguments are (Object, Object), but here the
> both arguments are String[]. I think that the mergeValues() method can
> be simplified in Tomcat 9.

I'll take a look.

> The "parameters" field in Tomcat 6 is returned by
> ApplicationHttpRequest.getParameterMap() and Javadoc for that method
> in ServletRequest says "The values in the parameter map are of type
> String array."  so I think that we are OK to assume that the original
> values are String[].  It would be safer though to define
> queryParameters as Map<String, Object> in Tomcat 6.

Given that is all internal code and a specification requirement to
return String[] I'm happy leaving it as is for now.

Thanks again for the review.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to