Skip to content

Commit

Permalink
Fix infinite loop for skip filters with one element
Browse files Browse the repository at this point in the history
  • Loading branch information
kevburnsjr committed Sep 26, 2021
1 parent ca483b2 commit 6d79420
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion skipfilter.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,17 @@ func (sf *SkipFilter) getFilter(k interface{}) *filter {
}
var id uint64
var prev uint64
var first = true
for el, ok := sf.list.FindGreaterOrEqual(&entry{id: f.i}); ok && el != nil; el = sf.list.Next(el) {
if id = el.GetValue().(*entry).id; id < prev {
if id = el.GetValue().(*entry).id; !first && id <= prev {
// skiplist loops back to first element so we have to detect loop and break manually
break
}
if sf.test(el.GetValue().(*entry).val, k) {
f.set.Add(id)
}
prev = id
first = false
}
f.i = sf.i
return f
Expand Down

0 comments on commit 6d79420

Please sign in to comment.