Optimize CorsConfiguration::checkHeaders

In the checkHeaders method, if allowedHeaders contains * the result
size can be requestHeaders.size(), but if this is not the case
then the result size can only be as big as the minimum value
of requestHeaders.size() and allowedHeaders.size().
requestHeaders.size() can be potentially big (user input) and
allowedHeaders.size() could be small, so this saves memory in
that case.

Closes gh-29853
This commit is contained in:
Thom Hurks 2023-01-19 11:47:37 +01:00 committed by Arjen Poutsma
parent d5b0782700
commit aac1ed6ee5
1 changed files with 2 additions and 1 deletions

View File

@ -676,7 +676,8 @@ public class CorsConfiguration {
} }
boolean allowAnyHeader = this.allowedHeaders.contains(ALL); boolean allowAnyHeader = this.allowedHeaders.contains(ALL);
List<String> result = new ArrayList<>(requestHeaders.size()); int maxResultSize = allowAnyHeader ? requestHeaders.size() : Math.min(requestHeaders.size(), this.allowedHeaders.size());
List<String> result = new ArrayList<>(maxResultSize);
for (String requestHeader : requestHeaders) { for (String requestHeader : requestHeaders) {
if (StringUtils.hasText(requestHeader)) { if (StringUtils.hasText(requestHeader)) {
requestHeader = requestHeader.trim(); requestHeader = requestHeader.trim();