From d4a6294b01fce41f10aa8e43479b9faff961524a Mon Sep 17 00:00:00 2001 From: Hiroki Hanada Date: Fri, 1 Aug 2025 13:53:16 +0900 Subject: [PATCH] fix: IDNA awareness in the zone finder Signed-off-by: Hiroki Hanada --- provider/zonefinder.go | 5 +++-- provider/zonefinder_test.go | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/provider/zonefinder.go b/provider/zonefinder.go index 08e6b3162..a529e17e7 100644 --- a/provider/zonefinder.go +++ b/provider/zonefinder.go @@ -20,7 +20,8 @@ import ( "strings" log "github.com/sirupsen/logrus" - "golang.org/x/net/idna" + + "sigs.k8s.io/external-dns/internal/idna" ) type ZoneIDName map[string]string @@ -48,7 +49,7 @@ func (z ZoneIDName) FindZone(hostname string) (string, string) { if strings.Contains(label, "_") { continue } - convertedLabel, err := idna.Lookup.ToUnicode(label) + convertedLabel, err := idna.Profile.ToUnicode(label) if err != nil { log.Warnf("Failed to convert label %q of hostname %q to its Unicode form: %v", label, hostname, err) convertedLabel = label diff --git a/provider/zonefinder_test.go b/provider/zonefinder_test.go index 4eddd36cb..b02a03880 100644 --- a/provider/zonefinder_test.go +++ b/provider/zonefinder_test.go @@ -34,6 +34,7 @@ func TestZoneIDName(t *testing.T) { z.Add("123123", "_metadata.example.com") z.Add("1231231", "_foo._metadata.example.com") z.Add("456456", "_metadata.エイミー.みんな") + z.Add("123412", "*.example.com") assert.Equal(t, ZoneIDName{ "123456": "qux.baz", @@ -42,6 +43,7 @@ func TestZoneIDName(t *testing.T) { "123123": "_metadata.example.com", "1231231": "_foo._metadata.example.com", "456456": "_metadata.エイミー.みんな", + "123412": "*.example.com", }, z) // simple entry in a domain @@ -83,8 +85,12 @@ func TestZoneIDName(t *testing.T) { assert.Equal(t, "_foo._metadata.example.com", zoneName) assert.Equal(t, "1231231", zoneID) - hook := testutils.LogsUnderTestWithLogLevel(log.WarnLevel, t) - _, _ = z.FindZone("???") + zoneID, zoneName = z.FindZone("*.example.com") + assert.Equal(t, "*.example.com", zoneName) + assert.Equal(t, "123412", zoneID) - testutils.TestHelperLogContains("Failed to convert label \"???\" of hostname \"???\" to its Unicode form: idna: disallowed rune U+003F", hook, t) + hook := testutils.LogsUnderTestWithLogLevel(log.WarnLevel, t) + _, _ = z.FindZone("xn--not-a-valid-punycode") + + testutils.TestHelperLogContains("Failed to convert label \"xn--not-a-valid-punycode\" of hostname \"xn--not-a-valid-punycode\" to its Unicode form: idna: invalid label", hook, t) }