From 450dda7fd0760d54580c73a07d16d4ca4078b6ba Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Fri, 10 Nov 2017 17:01:25 -0600 Subject: [PATCH] overflow bug in differenceRunBitmap Part 2 --- roaring/roaring.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/roaring/roaring.go b/roaring/roaring.go index e4d75a0d2..97994c37a 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -2513,12 +2513,20 @@ func differenceRunBitmap(a, b *container) *container { } output := &container{container_type: ContainerRun} output.n = a.n + if len(a.runs) == 0 { + return output + } for j := 0; j < len(a.runs); j++ { run := a.runs[j] + add := true for bit := a.runs[j].start; bit <= a.runs[j].last; bit++ { if b.bitmapContains(bit) { output.n-- if run.start == bit { + if bit == 65535 { //overflow + add = false + } + run.start++ } else if bit == run.last { run.last-- @@ -2534,13 +2542,15 @@ func differenceRunBitmap(a, b *container) *container { break } } + if bit == 65535 { //overflow break } } if run.start <= run.last { - output.runs = append(output.runs, run) - + if add { + output.runs = append(output.runs, run) + } } }