Repository navigation
Copy query parameter lists when building UriComponents - #37431
Open
cookie-meringue wants to merge 1 commit into
Open
cookie-meringue wants to merge 1 commit into
cookie-meringue wants to merge 1 commit into
Conversation
UriComponentsBuilder.build() copies the query parameter map but shares the value lists for keys already present. Adding another value to one of those keys after build() changes the earlier UriComponents. Adding a new key does not, since the map itself was copied. Copy each query parameter list during build so earlier results keep their original queries. Signed-off-by: cookie-meringue <daehyeon3351@gmail.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Current behavior
UriComponentsBuilder.build()copies the query parameter map but not the lists of values stored in it.The builder and the resulting
UriComponentscan therefore share mutable query parameter lists.Problem
Adding a value to an existing query parameter after
build()can change the query of an earlierUriComponentsresult.A caller that retains
firstcan therefore get a different URI when it uses the result later.Fix
buildInternal()now creates a newLinkedMultiValueMapand copies the parameters withaddAll(...), which creates an independent value list for each key.The same example now produces: