From 69a738ccf095d17f13067a2b68f1256d1bd9975f Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Mar 2026 16:42:05 +0100 Subject: [PATCH] Fix incorrect hostname matching between listener and route --- pkg/provider/kubernetes/gateway/kubernetes.go | 15 ++------------- .../kubernetes/gateway/kubernetes_test.go | 7 +++++++ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/pkg/provider/kubernetes/gateway/kubernetes.go b/pkg/provider/kubernetes/gateway/kubernetes.go index d09e2e751b..6525a75c38 100644 --- a/pkg/provider/kubernetes/gateway/kubernetes.go +++ b/pkg/provider/kubernetes/gateway/kubernetes.go @@ -1093,24 +1093,13 @@ func findMatchingHostname(h1, h2 gatev1.Hostname) gatev1.Hostname { } trimmedH1 := strings.TrimPrefix(string(h1), "*") - // root domain doesn't match subdomain wildcard. - if trimmedH1 == string(h2) { - return "" - } if !strings.HasSuffix(string(h2), trimmedH1) { return "" } - return lessWildcards(h1, h2) -} - -func lessWildcards(h1, h2 gatev1.Hostname) gatev1.Hostname { - if strings.Count(string(h1), "*") > strings.Count(string(h2), "*") { - return h2 - } - - return h1 + // since h1 is a suffix of h2, we know h2 is the more specific host + return h2 } func allowRoute(listener gatewayListener, routeNamespace, routeKind string) bool { diff --git a/pkg/provider/kubernetes/gateway/kubernetes_test.go b/pkg/provider/kubernetes/gateway/kubernetes_test.go index 988ff73a99..f397c71155 100644 --- a/pkg/provider/kubernetes/gateway/kubernetes_test.go +++ b/pkg/provider/kubernetes/gateway/kubernetes_test.go @@ -7630,6 +7630,13 @@ func Test_findMatchingHostnames(t *testing.T) { want: []gatev1.Hostname{"toto.foo.com", "test.foo.com"}, wantOk: true, }, + { + desc: "Matching wildcard subsubdomain with listener wildcard subdomain", + listenerHostname: ptr.To(gatev1.Hostname("*.foo.com")), + routeHostnames: []gatev1.Hostname{"*.bar.foo.com"}, + want: []gatev1.Hostname{"*.bar.foo.com"}, + wantOk: true, + }, } for _, test := range testCases {