diff --git a/pkg/common/bloomfilter/cbloomfilter.go b/pkg/common/bloomfilter/cbloomfilter.go index 4e8fcb9f9de17..799a7f3c18e9e 100644 --- a/pkg/common/bloomfilter/cbloomfilter.go +++ b/pkg/common/bloomfilter/cbloomfilter.go @@ -266,6 +266,9 @@ func (bf *CBloomFilter) AddVector(v *vector.Vector) { } func (bf *CBloomFilter) testAndAddFixedVector(v *vector.Vector, callBack func(bool, bool, int)) { + if v.Length() == 0 { + return + } fixedData := v.GetData() typeSize := v.GetType().TypeSize() length := v.Length() @@ -323,6 +326,9 @@ func (bf *CBloomFilter) testAndAddVarlenaVector(v *vector.Vector, callBack func( } func (bf *CBloomFilter) testFixedVector(v *vector.Vector, callBack func(bool, bool, int)) []uint8 { + if v.Length() == 0 { + return []uint8{} + } fixedData := v.GetData() typeSize := v.GetType().TypeSize() length := v.Length() @@ -385,6 +391,9 @@ func (bf *CBloomFilter) testVarlenaVector(v *vector.Vector, callBack func(bool, } func (bf *CBloomFilter) addFixedVector(v *vector.Vector) { + if v.Length() == 0 { + return + } fixedData := v.GetData() typeSize := v.GetType().TypeSize() length := v.Length() diff --git a/pkg/common/bloomfilter/cbloomfilter_fix_test.go b/pkg/common/bloomfilter/cbloomfilter_fix_test.go index 401f134824043..42afd241add19 100644 --- a/pkg/common/bloomfilter/cbloomfilter_fix_test.go +++ b/pkg/common/bloomfilter/cbloomfilter_fix_test.go @@ -120,6 +120,21 @@ func TestCBloomFilter_VarlenaVectorWithEmptySlices(t *testing.T) { require.True(t, bf2.Test([]byte("world"))) } +func TestCBloomFilter_EmptyFixedVector(t *testing.T) { + mp := mpool.MustNewZero() + vec := vector.NewVec(types.T_int64.ToType()) + defer vec.Free(mp) + + bf := NewCBloomFilterWithProbability(1, 0.01) + defer bf.Free() + + require.NotPanics(t, func() { + require.Empty(t, bf.TestVector(vec, nil)) + }) + require.NotPanics(t, func() { bf.AddVector(vec) }) + require.NotPanics(t, func() { bf.TestAndAddVector(vec, nil) }) +} + func TestCBloomFilter_IntegerCompatibility(t *testing.T) { bf := NewCBloomFilterWithProbability(100, 0.0001) defer bf.Free()