chore: disallow space at begin or end in DomainTrie

This commit is contained in:
wwqgtxx 2024-09-21 21:03:59 +08:00
parent d80e8bb0c2
commit 7dafe7889e
2 changed files with 21 additions and 0 deletions

View File

@ -3,6 +3,8 @@ package trie
import ( import (
"errors" "errors"
"strings" "strings"
"unicode"
"unicode/utf8"
) )
const ( const (
@ -25,6 +27,14 @@ func ValidAndSplitDomain(domain string) ([]string, bool) {
if domain != "" && domain[len(domain)-1] == '.' { if domain != "" && domain[len(domain)-1] == '.' {
return nil, false return nil, false
} }
if domain != "" {
if r, _ := utf8.DecodeRuneInString(domain); unicode.IsSpace(r) {
return nil, false
}
if r, _ := utf8.DecodeLastRuneInString(domain); unicode.IsSpace(r) {
return nil, false
}
}
domain = strings.ToLower(domain) domain = strings.ToLower(domain)
parts := strings.Split(domain, domainStep) parts := strings.Split(domain, domainStep)
if len(parts) == 1 { if len(parts) == 1 {

View File

@ -127,3 +127,14 @@ func TestTrie_Foreach(t *testing.T) {
}) })
assert.Equal(t, 7, count) assert.Equal(t, 7, count)
} }
func TestTrie_Space(t *testing.T) {
validDomain := func(domain string) bool {
_, ok := trie.ValidAndSplitDomain(domain)
return ok
}
assert.True(t, validDomain("google.com"))
assert.False(t, validDomain(" google.com"))
assert.False(t, validDomain(" google.com "))
assert.True(t, validDomain("Mijia Cloud"))
}