Fix case sensitive array query parameters #8988
Merged
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.
Description:
My first attempt (#8852) at fixing this issue did not accommodate the scenario where a query parameter is provided more than once. When that happens, the Express query parser aggregates the values for the key into an array. Thus, when the
order=ASC
parameter is specified a single time, the value is simply a string. Howeverorder=ASC&order=ASC
results in the singleorder
key, but this time with a value of[ ASC, ASC]
.The solution is to accommodate the possibility of the array, and in that case to canonicalize each element individually.
Related issue(s):
Fixes #8790
Notes for reviewer:
Beyond the fact this scenario was not tested for previously, my assumption was that the process of merging multiple values within
requestQueryParser()
was handling this possibility. And, it was in the sense that the original code could handle whether the request parameter was a single value or an array, and that it was also merging to support case-insensitive keys.Checklist