in FilterBlockReader::KeyMayMatch we should first judge start < limit nor start <= limit
- Dominant language
- C++
- Stars
- 39.4k
- Forks
- 8.2k
- PR merge metrics
- No merged PRs in 30d
Description
bool FilterBlockReader::KeyMayMatch(uint64_t block_offset, const Slice& key) {
uint64_t index = block_offset >> base_lg_;
if (index < num_) {
uint32_t start = DecodeFixed32(offset_ + index * 4);
uint32_t limit = DecodeFixed32(offset_ + index * 4 + 4);
if (start <= limit && limit <= static_cast(offset_ - data_)) { ------->> start should be less than limit
Slice filter = Slice(data_ + start, limit - start);
return policy_->KeyMayMatch(key, filter);
} else if (start == limit) { ----------->> or this code will never run into
// Empty filters do not match any keys
return false;
}
}
return true; // Errors are treated as potential matches
}
Contributor guide
Assessment
This issue has not been assessed yet.