From 6bc915526fdf7044ab14ecb89f7a1de7812ea720 Mon Sep 17 00:00:00 2001 From: Larvan2 <78135608+Larvan2@users.noreply.github.com> Date: Sat, 6 Jan 2024 17:54:09 +0800 Subject: [PATCH] fix: resolve IPv6 rule-set issue #959. --- component/trie/ipcidr_trie.go | 4 ++++ component/trie/trie_test.go | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/component/trie/ipcidr_trie.go b/component/trie/ipcidr_trie.go index a2ccfa16..ee8659be 100644 --- a/component/trie/ipcidr_trie.go +++ b/component/trie/ipcidr_trie.go @@ -185,6 +185,10 @@ func addIpv6Cidr(trie *IpCidrTrie, ip net.IP, groupSize int) { } for i := 2; i < groupSize; i += 2 { + if ip[i] == 0 && ip[i+1] == 0 { + node.Mark = true + } + if node.Mark { return } diff --git a/component/trie/trie_test.go b/component/trie/trie_test.go index e1b20103..a589b7ca 100644 --- a/component/trie/trie_test.go +++ b/component/trie/trie_test.go @@ -74,6 +74,14 @@ func TestIpv6AddFail(t *testing.T) { assert.IsType(t, new(net.ParseError), err) } +func TestIpv6SearchSub(t *testing.T) { + trie := NewIpCidrTrie() + assert.NoError(t, trie.AddIpCidrForString("240e::/18")) + + assert.Equal(t, true, trie.IsContainForString("240e:964:ea02:100:1800::71")) + +} + func TestIpv6Search(t *testing.T) { trie := NewIpCidrTrie()