From 7dafe7889e994ff140e8e5c71910afd3d6f81760 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Sat, 21 Sep 2024 21:03:59 +0800 Subject: [PATCH] chore: disallow space at begin or end in DomainTrie --- component/trie/domain.go | 10 ++++++++++ component/trie/domain_test.go | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/component/trie/domain.go b/component/trie/domain.go index 87dfeda6..574a59ca 100644 --- a/component/trie/domain.go +++ b/component/trie/domain.go @@ -3,6 +3,8 @@ package trie import ( "errors" "strings" + "unicode" + "unicode/utf8" ) const ( @@ -25,6 +27,14 @@ func ValidAndSplitDomain(domain string) ([]string, bool) { if domain != "" && domain[len(domain)-1] == '.' { 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) parts := strings.Split(domain, domainStep) if len(parts) == 1 { diff --git a/component/trie/domain_test.go b/component/trie/domain_test.go index 916f6107..6aab72d3 100644 --- a/component/trie/domain_test.go +++ b/component/trie/domain_test.go @@ -127,3 +127,14 @@ func TestTrie_Foreach(t *testing.T) { }) 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")) +}