# UNDF: UNDF-2026-000000736 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; +import java.util.LinkedHashSet; import java.util.Map; import jakarta.servlet.http.HttpServletRequest; @@ -66,7 +67,8 @@ public class EncodedResourceResolver extends AbstractResourceResolver { - private final List contentCodings = new ArrayList<>(DEFAULT_CODINGS); + // FIX: Use LinkedHashSet so that contentCodings.contains() is O(1) per + // accepted-encoding token on every static-resource request, not O(C). + private final LinkedHashSet contentCodings = new LinkedHashSet<>(DEFAULT_CODINGS); public void setContentCodings(List codings) { this.contentCodings.clear(); this.contentCodings.addAll(codings); } public List getContentCodings() { - return Collections.unmodifiableList(this.contentCodings); + return Collections.unmodifiableList(new ArrayList<>(this.contentCodings)); } --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/EncodedResourceResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/EncodedResourceResolver.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; +import java.util.LinkedHashSet; import java.util.Map; @@ -67,7 +68,8 @@ public class EncodedResourceResolver extends AbstractResourceResolver { - private final List contentCodings = new ArrayList<>(DEFAULT_CODINGS); + // FIX: LinkedHashSet for O(1) contains() on per-request accept-encoding scan. + private final LinkedHashSet contentCodings = new LinkedHashSet<>(DEFAULT_CODINGS); public void setContentCodings(List codings) { this.contentCodings.clear(); this.contentCodings.addAll(codings); } public List getContentCodings() { - return Collections.unmodifiableList(this.contentCodings); + return Collections.unmodifiableList(new ArrayList<>(this.contentCodings)); }