Fix case sensitivity issue in ServletRequestHeadersAdapter

The RequestHeaderOverrideWrapper did not deduplicate in keySet()
across underlying headers and overrides.

A similar change in size() even if it was working correctly,
to align with keySet and make it more efficient.

Closes gh-36418
This commit is contained in:
rstoyanchev
2026-03-06 16:51:27 +00:00
parent 13b0643828
commit 06d4a8fc4b
2 changed files with 58 additions and 5 deletions
@@ -305,12 +305,13 @@ final class ServletRequestHeadersAdapter implements MultiValueMap<String, String
if (this.overrideMap == null) {
return this.delegate.size();
}
Set<String> set = new LinkedHashSet<>();
int size = this.overrideMap.size();
for (String name : this.delegate.keySet()) {
set.add(name.toLowerCase(Locale.ROOT));
if (!this.overrideMap.containsKey(name)) {
size++;
}
}
this.overrideMap.keySet().forEach(key -> set.add(key.toLowerCase(Locale.ROOT)));
return set.size();
return size;
}
@Override
@@ -375,7 +376,12 @@ final class ServletRequestHeadersAdapter implements MultiValueMap<String, String
@Override
public Set<String> keySet() {
if (this.overrideMap != null) {
Set<String> set = new LinkedHashSet<>(this.delegate.keySet());
Set<String> set = new LinkedHashSet<>();
for (String name : this.delegate.keySet()) {
if (!this.overrideMap.containsKey(name)) {
set.add(name);
}
}
set.addAll(this.overrideMap.keySet());
return set;
}