mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-11-27 19:11:27 +00:00
fix(common): strmatcher match domain safety
This commit is contained in:
parent
cd1d000860
commit
fce86aad33
|
@ -225,7 +225,11 @@ func (ac *ACAutomaton) Match(s string) bool {
|
|||
// 2. the match string is through a fail edge. NOT FULL MATCH
|
||||
// 2.1 Through a fail edge, but there exists a valid node. SUBSTR
|
||||
for i := len(s) - 1; i >= 0; i-- {
|
||||
idx := char2Index[s[i]]
|
||||
chr := int(s[i])
|
||||
if chr >= len(char2Index) {
|
||||
return false
|
||||
}
|
||||
idx := char2Index[chr]
|
||||
fullMatch = fullMatch && ac.trie[node][idx].edgeType
|
||||
node = ac.trie[node][idx].nextNode
|
||||
switch ac.exists[node].matchType {
|
||||
|
|
|
@ -217,6 +217,10 @@ func TestACAutomaton(t *testing.T) {
|
|||
pattern: "vvgoogle.com",
|
||||
res: true,
|
||||
},
|
||||
{
|
||||
pattern: "½",
|
||||
res: false,
|
||||
},
|
||||
}
|
||||
for _, test := range cases2Output {
|
||||
if m := ac.Match(test.pattern); m != test.res {
|
||||
|
@ -224,7 +228,6 @@ func TestACAutomaton(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
cases3Input := []struct {
|
||||
pattern string
|
||||
|
|
Loading…
Reference in a new issue