-
Notifications
You must be signed in to change notification settings - Fork 6.2k
Description
Hi there!
Thanks for taking a look at this issue. Please let me know if you require more information.
Let's discuss!
Describe the bug
HttpSessionRequestCache#getMatchingRequest relies on org.springframework.web.util.UriComponentsBuilder#fromUriString(String) to be able to handle decoded % characters.
To Reproduce
The org.springframework.web.util.UriComponentsBuilder#fromUriString(String) cannot handle a % followed by characters that result in false %-encoding.
@Test
void unencodedPercent(){
assertThatRuntimeException().isThrownBy(() -> UriComponentsBuilder.fromUriString("/30 % off"));
}
This leads to a org.springframework.web.util.InvalidUrlException: Bad path when such a request gets to
Line 107 in ec3cc66
| || !UriComponentsBuilder.fromUriString(UrlUtils.buildRequestUrl(request)) |
An encoded request
https://example.com/myapp/discounts/30%20%25%20off is returned decoded by spring-security/web/src/main/java/org/springframework/security/web/util/UrlUtils.java
Lines 91 to 94 in ec3cc66
| * @return the decoded URL, excluding any server name, context path or servlet path | |
| * | |
| */ | |
| public static String buildRequestUrl(HttpServletRequest r) { |
The
UriComponentsBuilder cannot handle this decoded %
Expected behavior
My request does not result in an InvalidUrlException.