From e4c39d49fb322169c2932fc10b0c5544318add78 Mon Sep 17 00:00:00 2001 From: Tyler Treat Date: Tue, 8 May 2018 09:04:43 -0500 Subject: [PATCH] Fix collision panic in DeletableBloomFilter --- deletable.go | 2 +- deletable_test.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/deletable.go b/deletable.go index 2e9e810..c098d7d 100644 --- a/deletable.go +++ b/deletable.go @@ -42,7 +42,7 @@ func NewDeletableBloomFilter(n, r uint, fpRate float64) *DeletableBloomFilter { ) return &DeletableBloomFilter{ buckets: NewBuckets(m-r, 1), - collisions: NewBuckets(r, 1), + collisions: NewBuckets(r+1, 1), hash: fnv.New64(), m: m - r, regionSize: (m - r) / r, diff --git a/deletable_test.go b/deletable_test.go index f64859b..a5aab99 100644 --- a/deletable_test.go +++ b/deletable_test.go @@ -92,6 +92,14 @@ func TestDeletableTestAndAdd(t *testing.T) { } } +// Ensures collisions do not cause a panic due to regionSize. +func TestDeletableCollisions(t *testing.T) { + d := NewDeletableBloomFilter(100, 120, 0.05) + for i := 0; i < 100; i++ { + d.Add([]byte(strconv.Itoa(i))) + } +} + // Ensures that TestAndRemove behaves correctly. func TestDeletableTestAndRemove(t *testing.T) { d := NewDeletableBloomFilter(100, 10, 0.1)