Skip to content

Commit 19e06cc

Browse files
committed
Prevent overflows from large capacity/max_elements
1 parent 3472e2f commit 19e06cc

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/false_positives.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ uint64_t BaseFPBits(uint32_t bits, uint32_t capacity) {
8181

8282
size_t ComputeCapacity(uint32_t bits, size_t max_elements, uint32_t fpbits) {
8383
if (bits == 0) return 0;
84-
uint64_t base_fpbits = BaseFPBits(bits, max_elements);
84+
if (max_elements > 0xffffffff) return max_elements;
85+
uint64_t base_fpbits = BaseFPBits(bits, static_cast<uint32_t>(max_elements));
8586
// The fpbits provided by the base max_elements==capacity case are sufficient.
8687
if (base_fpbits >= fpbits) return max_elements;
8788
// Otherwise, increment capacity by ceil(fpbits / bits) beyond that.
@@ -90,6 +91,7 @@ size_t ComputeCapacity(uint32_t bits, size_t max_elements, uint32_t fpbits) {
9091

9192
size_t ComputeMaxElements(uint32_t bits, size_t capacity, uint32_t fpbits) {
9293
if (bits == 0) return 0;
94+
if (capacity > 0xffffffff) return capacity;
9395
// Start with max_elements=capacity, and decrease max_elements until the corresponding capacity is capacity.
9496
size_t max_elements = capacity;
9597
while (true) {

0 commit comments

Comments
 (0)