From 541924dc88caf780e14cf7960ee163c7c39438a6 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sun, 5 Nov 2017 10:37:23 +0100 Subject: [PATCH] fix cidr parsing for non-normalized ips --- common/net/ipnet.go | 1 + common/net/ipnet_test.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/common/net/ipnet.go b/common/net/ipnet.go index 530d3b1b7..c30f2e882 100644 --- a/common/net/ipnet.go +++ b/common/net/ipnet.go @@ -44,6 +44,7 @@ func (n *IPNetTable) Add(ipNet *net.IPNet) { func (n *IPNetTable) AddIP(ip []byte, mask byte) { k := ipToUint32(ip) + k = (k >> (32 - mask)) << (32 - mask) // normalize ip existing, found := n.cache[k] if !found || existing > mask { n.cache[k] = mask diff --git a/common/net/ipnet_test.go b/common/net/ipnet_test.go index 132dca9b7..5c22c8332 100644 --- a/common/net/ipnet_test.go +++ b/common/net/ipnet_test.go @@ -32,6 +32,7 @@ func TestIPNet(t *testing.T) { ipNet.Add(parseCIDR(("198.51.100.0/24"))) ipNet.Add(parseCIDR(("203.0.113.0/24"))) ipNet.Add(parseCIDR(("8.8.8.8/32"))) + ipNet.AddIP(net.ParseIP("91.108.4.0"), 16) assert(ipNet.Contains(ParseIP("192.168.1.1")), IsTrue) assert(ipNet.Contains(ParseIP("192.0.0.0")), IsTrue) assert(ipNet.Contains(ParseIP("192.0.1.0")), IsFalse) @@ -40,4 +41,5 @@ func TestIPNet(t *testing.T) { assert(ipNet.Contains(ParseIP("8.8.8.7")), IsFalse) assert(ipNet.Contains(ParseIP("8.8.8.8")), IsTrue) assert(ipNet.Contains(ParseIP("2001:cdba::3257:9652")), IsFalse) + assert(ipNet.Contains(ParseIP("91.108.255.254")), IsTrue) }