From 545dd7039b6440e87b08f8d0c0982e0421a566f7 Mon Sep 17 00:00:00 2001 From: Eugene Burkov Date: Tue, 19 Sep 2023 16:25:13 +0300 Subject: [PATCH] filtering: fix sort --- internal/filtering/rewrites.go | 21 ++++++++++----------- internal/filtering/rewrites_test.go | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/internal/filtering/rewrites.go b/internal/filtering/rewrites.go index fa1b7774091..4a73cc3719d 100644 --- a/internal/filtering/rewrites.go +++ b/internal/filtering/rewrites.go @@ -118,23 +118,22 @@ func matchDomainWildcard(host, wildcard string) (ok bool) { // 2. wildcard > exact; // 3. lower level wildcard > higher level wildcard; func (rw *LegacyRewrite) Compare(b *LegacyRewrite) (res int) { - if rw.Type == dns.TypeCNAME && b.Type != dns.TypeCNAME { - return -1 - } else if rw.Type != dns.TypeCNAME && b.Type == dns.TypeCNAME { + if rw.Type == dns.TypeCNAME { + if b.Type != dns.TypeCNAME { + return -1 + } + } else if b.Type == dns.TypeCNAME { return 1 } - aIsWld, bIsWld := isWildcard(rw.Domain), isWildcard(b.Domain) - if aIsWld == bIsWld { + if aIsWld, bIsWld := isWildcard(rw.Domain), isWildcard(b.Domain); aIsWld == bIsWld { // Both are either wildcards or both aren't. - return len(rw.Domain) - len(b.Domain) - } - - if aIsWld { + return len(b.Domain) - len(rw.Domain) + } else if aIsWld { return 1 + } else { + return -1 } - - return -1 } // prepareRewrites normalizes and validates all legacy DNS rewrites. diff --git a/internal/filtering/rewrites_test.go b/internal/filtering/rewrites_test.go index 7f80df0957e..cdec8529a1e 100644 --- a/internal/filtering/rewrites_test.go +++ b/internal/filtering/rewrites_test.go @@ -80,6 +80,12 @@ func TestRewrites(t *testing.T) { }, { Domain: "*.issue4016.com", Answer: "sub.issue4016.com", + }, { + Domain: "*.sub.issue6226.com", + Answer: addr2v4.String(), + }, { + Domain: "*.issue6226.com", + Answer: addr1v4.String(), }} require.NoError(t, d.prepareRewrites()) @@ -182,6 +188,20 @@ func TestRewrites(t *testing.T) { wantIPs: nil, wantReason: NotFilteredNotFound, dtyp: dns.TypeA, + }, { + name: "issue6226", + host: "www.issue6226.com", + wantCName: "", + wantIPs: []netip.Addr{addr1v4}, + wantReason: Rewritten, + dtyp: dns.TypeA, + }, { + name: "issue6226_sub", + host: "www.sub.issue6226.com", + wantCName: "", + wantIPs: []netip.Addr{addr2v4}, + wantReason: Rewritten, + dtyp: dns.TypeA, }} for _, tc := range testCases {