Description
rougou opened SPR-17630 and commented
UriComponentsBuilder.toUriString() (and possibly UriComponentsBuilder.encode()) is broken as of 5.0.8.
The code was changed from
return build(false).encode().toUriString();
to
return encode().build().toUriString();
without any change to the javadoc.
There are 2 problems with this (other than the javadoc issue)
- UriComponentsBuilder itself gets mutated by calling toUriString(), which is unexpected behavior.
- If you have a query param value with curly braces such as "{{{{", an IllegalStateException will now be thrown. If you have a closing brace such as "{{{}", no exception will be thrown but it won't be url-encoded, either.
On top of that, the javadoc for UriComponentsBuilder.encode() basically says it will give the expected result while UriComponents.encode() will not, but not encoding braces and throwing IllegalStateExceptions is obviously not the expected result. It seems the variable expansion mechanism introduced is affecting behavior even when this feature is not used.
Affects: 5.0.8, 5.1.1
Issue Links:
- HtmlUnitRequestBuilder decodes plus sign in query parameter [SPR-17027] #21565 HtmlUnitRequestBuilder decodes plus sign in query parameter
- Support stricter encoding of URI variables in UriComponents [SPR-17039] #21577 Support stricter encoding of URI variables in UriComponents
Referenced from: commits b219c6c, 5aa131a, 124e817, dc3f953, c6e5008, 6398480
Backported to: 5.0.12