fix: filtering out duplicate domains
This commit is contained in:
parent
4c4f734572
commit
c486d7c67e
@ -27,6 +27,13 @@ type Set struct {
|
|||||||
func NewDomainTrieSet(keys []string) *Set {
|
func NewDomainTrieSet(keys []string) *Set {
|
||||||
filter := make(map[string]struct{}, len(keys))
|
filter := make(map[string]struct{}, len(keys))
|
||||||
reserveDomains := make([]string, 0, len(keys))
|
reserveDomains := make([]string, 0, len(keys))
|
||||||
|
filterFunc := func(reserveDomain string) bool {
|
||||||
|
_, ok := filter[reserveDomain]
|
||||||
|
if !ok {
|
||||||
|
filter[reserveDomain] = struct{}{}
|
||||||
|
}
|
||||||
|
return ok
|
||||||
|
}
|
||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
items, ok := ValidAndSplitDomain(key)
|
items, ok := ValidAndSplitDomain(key)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -35,16 +42,20 @@ func NewDomainTrieSet(keys []string) *Set {
|
|||||||
if items[0] == complexWildcard {
|
if items[0] == complexWildcard {
|
||||||
domain := strings.Join(items[1:], domainStep)
|
domain := strings.Join(items[1:], domainStep)
|
||||||
reserveDomain := utils.Reverse(domain)
|
reserveDomain := utils.Reverse(domain)
|
||||||
filter[reserveDomain] = struct{}{}
|
if !filterFunc(reserveDomain) {
|
||||||
reserveDomains = append(reserveDomains, reserveDomain)
|
reserveDomains = append(reserveDomains, reserveDomain)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
domain := strings.Join(items, domainStep)
|
domain := strings.Join(items, domainStep)
|
||||||
reserveDomain := utils.Reverse(domain)
|
reserveDomain := utils.Reverse(domain)
|
||||||
filter[reserveDomain] = struct{}{}
|
if !filterFunc(reserveDomain) {
|
||||||
reserveDomains = append(reserveDomains, reserveDomain)
|
reserveDomains = append(reserveDomains, reserveDomain)
|
||||||
}
|
}
|
||||||
sort.Strings(reserveDomains)
|
}
|
||||||
|
sort.Slice(reserveDomains, func(i, j int) bool {
|
||||||
|
return len(reserveDomains[i]) < len(reserveDomains[j])
|
||||||
|
})
|
||||||
keys = reserveDomains
|
keys = reserveDomains
|
||||||
ss := &Set{}
|
ss := &Set{}
|
||||||
if len(keys) == 0 {
|
if len(keys) == 0 {
|
||||||
|
Reference in New Issue
Block a user