/src/ndpi/fuzz/fuzz_ds_bitmap64_fuse.cpp
Line | Count | Source |
1 | | #include "ndpi_api.h" |
2 | | #include "fuzz_common_code.h" |
3 | | |
4 | | #include <stdint.h> |
5 | | #include "fuzzer/FuzzedDataProvider.h" |
6 | | |
7 | 811 | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
8 | 811 | FuzzedDataProvider fuzzed_data(data, size); |
9 | 811 | u_int16_t i, num_iteration, is_added = 0; |
10 | 811 | ndpi_bitmap64_fuse *b; |
11 | 811 | bool rc; |
12 | 811 | u_int64_t value, value_added; |
13 | | |
14 | | /* To allow memory allocation failures */ |
15 | 811 | fuzz_set_alloc_callbacks_and_seed(size); |
16 | | |
17 | 811 | b = ndpi_bitmap64_fuse_alloc(); |
18 | | |
19 | 811 | if(fuzzed_data.ConsumeBool()) |
20 | 425 | ndpi_bitmap64_fuse_compress(b); |
21 | | |
22 | 811 | num_iteration = fuzzed_data.ConsumeIntegral<u_int16_t>(); |
23 | 18.6M | for (i = 0; i < num_iteration; i++) { |
24 | 18.6M | value = fuzzed_data.ConsumeIntegral<u_int64_t>(); |
25 | | |
26 | 18.6M | rc = ndpi_bitmap64_fuse_set(b, value); |
27 | | /* Keep one random entry really added */ |
28 | 18.6M | if (rc == true && is_added == 0 && fuzzed_data.ConsumeBool()) { |
29 | 413 | value_added = value; |
30 | 413 | is_added = 1; |
31 | 413 | } |
32 | 18.6M | } |
33 | | |
34 | 811 | if(fuzzed_data.ConsumeBool()) |
35 | 76 | ndpi_bitmap64_fuse_compress(b); |
36 | | |
37 | | /* "Random" search */ |
38 | 811 | num_iteration = fuzzed_data.ConsumeIntegral<u_int8_t>(); |
39 | 17.2k | for (i = 0; i < num_iteration; i++) { |
40 | 16.4k | value = fuzzed_data.ConsumeIntegral<u_int64_t>(); |
41 | | |
42 | 16.4k | ndpi_bitmap64_fuse_isset(b, value); |
43 | 16.4k | } |
44 | | /* Search of an added entry */ |
45 | 811 | if (is_added) { |
46 | 413 | ndpi_bitmap64_fuse_isset(b, value_added); |
47 | 413 | } |
48 | | |
49 | 811 | ndpi_bitmap64_fuse_size(b); |
50 | | |
51 | 811 | ndpi_bitmap64_fuse_free(b); |
52 | | |
53 | 811 | return 0; |
54 | 811 | } |