java-topology/defects/traefik/patch/traefik-0002-cors-origin-map.patch

41 lines
1.3 KiB
Diff

# UNDF: UNDF-2026-000000558
--- a/pkg/middlewares/headers/header.go
+++ b/pkg/middlewares/headers/header.go
@@ -18,6 +18,7 @@ type Header struct {
next http.Handler
hasCustomHeaders bool
hasCorsHeaders bool
headers *dynamic.Headers
+ allowOriginSet map[string]struct{} // O(1) exact-origin lookup; built at init from AccessControlAllowOriginList
allowOriginRegexes []*regexp.Regexp
}
@@ -40,6 +41,12 @@ func NewHeader(next http.Handler, cfg dynamic.Headers) (*Header, error) {
+ originSet := make(map[string]struct{}, len(cfg.AccessControlAllowOriginList))
+ for _, o := range cfg.AccessControlAllowOriginList {
+ originSet[o] = struct{}{}
+ }
+
return &Header{
next: next,
headers: &cfg,
hasCustomHeaders: hasCustomHeaders,
hasCorsHeaders: hasCorsHeaders,
+ allowOriginSet: originSet,
allowOriginRegexes: regexes,
}, nil
}
@@ -178,10 +185,11 @@ func (s *Header) isOriginAllowed(origin string) (bool, string) {
- for _, item := range s.headers.AccessControlAllowOriginList {
- if item == "*" || item == origin {
- return true, item
- }
+ if _, ok := s.allowOriginSet["*"]; ok {
+ return true, "*"
+ }
+ if _, ok := s.allowOriginSet[origin]; ok { /* O(1) map lookup; was O(O) slice scan */
+ return true, origin
}
for _, regex := range s.allowOriginRegexes {