java-topology/defects/quarkus/patch/quarkus-0004-cors-origins-set.patch

26 lines
2 KiB
Diff

# UNDF: UNDF-2026-000000678
--- a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/cors/CORSFilter.java
+++ b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/cors/CORSFilter.java
@@ -26,6 +26,7 @@ public class CORSFilter implements Handler<RoutingContext> {
private final boolean wildcardOrigin;
private final boolean wildcardMethod;
private final List<Pattern> allowedOriginsRegex;
+ private final Set<String> allowedOriginsExact; // pre-built at construction: O(1) lookup per request
private final Set<HttpMethod> configuredHttpMethods;
private final String exposedHeaders;
@@ -40,6 +41,8 @@ public class CORSFilter implements Handler<RoutingContext> {
this.wildcardOrigin = isOriginConfiguredWithWildcard(this.corsConfig.origins());
this.wildcardMethod = isConfiguredWithWildcard(corsConfig.methods());
this.allowedOriginsRegex = this.wildcardOrigin ? List.of() : parseAllowedOriginsRegex(this.corsConfig.origins());
+ this.allowedOriginsExact = (this.wildcardOrigin || corsConfig.origins().isEmpty())
+ ? Set.of() : new HashSet<>(corsConfig.origins().get());
this.configuredHttpMethods = createConfiguredHttpMethods(this.corsConfig.methods());
this.exposedHeaders = createHeaderString(this.corsConfig.exposedHeaders());
this.allowedHeaders = createHeaderString(this.corsConfig.headers());
@@ -147,7 +150,7 @@ public class CORSFilter implements Handler<RoutingContext> {
//for both normal and preflight requests we need to check the origin
boolean allowsOrigin = wildcardOrigin;
boolean originMatches = !wildcardOrigin && corsConfig.origins().isPresent() &&
- (corsConfig.origins().get().contains(origin) || isOriginAllowedByRegex(allowedOriginsRegex, origin));
+ (allowedOriginsExact.contains(origin) || isOriginAllowedByRegex(allowedOriginsRegex, origin));