From 1f376ac0053e6c782f38ff96f38ffee122134f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 17 Jul 2024 15:58:44 +0800 Subject: [PATCH] domain: Fix panic caused by possible generation of duplicate keys for `domainSuffix` --- common/domain/matcher.go | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/common/domain/matcher.go b/common/domain/matcher.go index 83cbd485..a1d2c1d4 100644 --- a/common/domain/matcher.go +++ b/common/domain/matcher.go @@ -25,7 +25,11 @@ func NewMatcher(domains []string, domainSuffix []string) *Matcher { domainList = append(domainList, reverseDomainSuffix(domain)) } else { domainList = append(domainList, reverseDomain(domain)) - domainList = append(domainList, reverseRootDomainSuffix(domain)) + suffixDomain := "." + domain + if !seen[suffixDomain] { + seen[suffixDomain] = true + domainList = append(domainList, reverseDomainSuffix(suffixDomain)) + } } } for _, domain := range domains { @@ -139,16 +143,3 @@ func reverseDomainSuffix(domain string) string { b[l] = prefixLabel return string(b) } - -func reverseRootDomainSuffix(domain string) string { - l := len(domain) - b := make([]byte, l+2) - for i := 0; i < l; { - r, n := utf8.DecodeRuneInString(domain[i:]) - i += n - utf8.EncodeRune(b[l-i:], r) - } - b[l] = '.' - b[l+1] = prefixLabel - return string(b) -}