Skip to content

Commit 71576fb

Browse files
authored
adding roaring64 to fuzzer as a step toward solving issue 662 (#670)
1 parent e00fe6b commit 71576fb

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

fuzz/croaring_fuzzer.c

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
#include "roaring/roaring.h"
2222

23-
int LLVMFuzzerTestOneInput(const char *data, size_t size) {
23+
int bitmap32(const char *data, size_t size) {
2424
// We test that deserialization never fails.
2525
roaring_bitmap_t *bitmap =
2626
roaring_bitmap_portable_deserialize_safe(data, size);
@@ -48,3 +48,44 @@ int LLVMFuzzerTestOneInput(const char *data, size_t size) {
4848
}
4949
return 0;
5050
}
51+
52+
int bitmap64(const char *data, size_t size) {
53+
// We test that deserialization never fails.
54+
roaring64_bitmap_t *bitmap =
55+
roaring64_bitmap_portable_deserialize_safe(data, size);
56+
if (bitmap) {
57+
// The bitmap may not be usable if it does not follow the specification.
58+
// We can validate the bitmap we recovered to make sure it is proper.
59+
const char *reason_failure = NULL;
60+
if (roaring64_bitmap_internal_validate(bitmap, &reason_failure)) {
61+
// the bitmap is ok!
62+
uint64_t cardinality = roaring64_bitmap_get_cardinality(bitmap);
63+
64+
for (uint32_t i = 100; i < 1000; i++) {
65+
if (!roaring64_bitmap_contains(bitmap, i)) {
66+
cardinality++;
67+
roaring64_bitmap_add(bitmap, i);
68+
}
69+
}
70+
uint64_t new_cardinality = roaring64_bitmap_get_cardinality(bitmap);
71+
if (cardinality != new_cardinality) {
72+
printf("bug\n");
73+
exit(1);
74+
}
75+
}
76+
roaring64_bitmap_free(bitmap);
77+
}
78+
return 0;
79+
}
80+
int LLVMFuzzerTestOneInput(const char *data, size_t size) {
81+
int r;
82+
r = bitmap32(data, size);
83+
if (r) {
84+
return r;
85+
}
86+
r = bitmap64(data, size);
87+
if (r) {
88+
return r;
89+
}
90+
return 0;
91+
}

0 commit comments

Comments
 (0)