On 14/07/2016 00:22, Christopher Schultz wrote:
> Mark,
> 
> On 7/11/16 4:40 PM, Mark Thomas wrote:
>> This was triggered by a thread on the users list. [1]
>>
>> Tomcat does not, and hasn't as far back as at least 4.1.x, decoded the
>> path provided in the call to getRequestDispatcher(path).
>>
>> I think this might be incorrect. My logic for this is as follows.
>>
>> The servlet spec is clear (see 9.1.1) that path can include a query string.
>>
>> The query string is delimited by '?'.
>>
>> '?' is a valid character in the path if it is encoded.
>>
>> Users may want to use '?'in the path.
>>
>> Therefore users need to be able to provide an encoded path.
>>
>> Therefore the RequestDispatcher needs to decode the path.
>>
>>
>> Given how long this has been as it is, I'm worried that changing to
>> decoding the paths will break something. If we agree that this does need
>> to change, I think we'll need a configuration option to restore the
>> "don't decode" behaviour. I'm thinking a context attribute as that can
>> be set globally in conf/context.xml but over-ridden per Context if
>> necessary. Defaults TBD. We can worry about those if we agree that the
>> current behaviour is wrong.
>>
>> Thoughts?
> 
> +1 on this change
> 
> Just to be clear, this won't impact any existing code that does
> something like the following:
> 
> String target = "/foo/bar?a=b&c=d";
> request.getRequestDispatcher(target).forward(request, response);
> 
> The only thing it might break was if someone tried to use a URL
> containing a % sign that wasn't encoded:
> 
> String target = "/foo/bar?percent=%&hash=#";
> request.getRequestDispatcher(target).forward(request, response);
> 
> Right?

Right.

> I think that case is quite rare, so I'm also +1 to introducing this new
> behavior as the *default* with an option to revert back to the previous
> behavior.

I'm leaning that way too but I won't be in a position to do anything
about it for a couple of weeks. That should be fine since that would be
in time for the next monthly release cycle.

Mark

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

Reply via email to