diff --git a/roaring/roaring.go b/roaring/roaring.go index 16e6159d7..06533d5c0 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -1992,6 +1992,10 @@ func intersectBitmapRun(a, b *container) *container { if a.bitmapContains(i) { output.array = append(output.array, i) } + // If the run ends the container, break to avoid an infinite loop. + if i == 65535 { + break + } } } output.n = len(output.array) diff --git a/roaring/roaring_internal_test.go b/roaring/roaring_internal_test.go index 9cc2f2aa7..21a14c3eb 100644 --- a/roaring/roaring_internal_test.go +++ b/roaring/roaring_internal_test.go @@ -623,7 +623,7 @@ func TestIntersectBitmapRunArray(t *testing.T) { }, { bitmap: []uint64{0xFFFFFFFFFFFFFFFF, 1, 1, 1, 0xA, 1, 1, 0, 1}, - runs: []interval16{{start: 63, last: 10000}}, + runs: []interval16{{start: 63, last: 10000}, {start: 65000, last: 65535}}, exp: []uint16{63, 64, 128, 192, 257, 259, 320, 384, 512}, expN: 9, },