Skip to content

Commit d968594

Browse files
committed
Improve domain suffix match behavior
1 parent ef00a1e commit d968594

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

common/domain/matcher.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,19 @@ type Matcher struct {
1414
}
1515

1616
func NewMatcher(domains []string, domainSuffix []string) *Matcher {
17-
domainList := make([]string, 0, len(domains)+len(domainSuffix))
17+
domainList := make([]string, 0, len(domains)+2*len(domainSuffix))
1818
seen := make(map[string]bool, len(domainList))
1919
for _, domain := range domainSuffix {
2020
if seen[domain] {
2121
continue
2222
}
2323
seen[domain] = true
24-
domainList = append(domainList, reverseDomainSuffix(domain))
24+
if domain[0] == '.' {
25+
domainList = append(domainList, reverseDomainSuffix(domain))
26+
} else {
27+
domainList = append(domainList, reverseDomain(domain))
28+
domainList = append(domainList, reverseRootDomainSuffix(domain))
29+
}
2530
}
2631
for _, domain := range domains {
2732
if seen[domain] {
@@ -134,3 +139,16 @@ func reverseDomainSuffix(domain string) string {
134139
b[l] = prefixLabel
135140
return string(b)
136141
}
142+
143+
func reverseRootDomainSuffix(domain string) string {
144+
l := len(domain)
145+
b := make([]byte, l+2)
146+
for i := 0; i < l; {
147+
r, n := utf8.DecodeRuneInString(domain[i:])
148+
i += n
149+
utf8.EncodeRune(b[l-i:], r)
150+
}
151+
b[l] = '.'
152+
b[l+1] = prefixLabel
153+
return string(b)
154+
}

0 commit comments

Comments
 (0)