Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit c60f332

Browse files
authored
Merge pull request #5 from HenryGessau/fix-remove
Fix corner case when top node in ipTree is removed
2 parents a374453 + 076b1b6 commit c60f332

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

ipset_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,20 @@ func TestIPSetRemoveAll(t *testing.T) {
197197
assert.False(t, set.ContainsNet(cidr1))
198198
}
199199

200+
func TestIPSet_RemoveTop(t *testing.T) {
201+
testSet := IPSet{}
202+
ip1 := net.ParseIP("10.0.0.1")
203+
ip2 := net.ParseIP("10.0.0.2")
204+
205+
testSet.Insert(ip2) // top
206+
testSet.Insert(ip1) // inserted at left
207+
testSet.Remove(ip2) // remove top node
208+
209+
assert.True(t, testSet.Contains(ip1))
210+
assert.False(t, testSet.Contains(ip2))
211+
assert.Nil(t, testSet.tree.next())
212+
}
213+
200214
func TestIPSetInsertOverlapping(t *testing.T) {
201215
set := IPSet{}
202216

iptree.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ func (t *ipTree) remove() *ipTree {
118118
} else {
119119
t.up.setRight(newChild)
120120
}
121+
} else if newChild != nil {
122+
newChild.up = t.up
121123
}
122124
return newChild
123125
}

0 commit comments

Comments
 (0)