/src/ndpi/fuzz/fuzz_ds_cmsketch.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 | 183 | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
8 | 183 | FuzzedDataProvider fuzzed_data(data, size); |
9 | 183 | struct ndpi_cm_sketch *sketch; |
10 | 183 | u_int16_t i, num_hashes, num_iteration, num_lookup; |
11 | | |
12 | | /* Just to have some data */ |
13 | 183 | if (fuzzed_data.remaining_bytes() < 1024) |
14 | 18 | return -1; |
15 | | |
16 | | /* To allow memory allocation failures */ |
17 | 165 | fuzz_set_alloc_callbacks_and_seed(size); |
18 | | |
19 | 165 | num_hashes = fuzzed_data.ConsumeIntegralInRange(0, 8192); |
20 | 165 | num_iteration = fuzzed_data.ConsumeIntegral<u_int8_t>(); |
21 | 165 | num_lookup = fuzzed_data.ConsumeIntegral<u_int8_t>(); |
22 | | |
23 | 165 | sketch = ndpi_cm_sketch_init(num_hashes); |
24 | 165 | if (sketch) { |
25 | 14.9k | for (i = 0; i < num_iteration; i++) { |
26 | 14.8k | ndpi_cm_sketch_add(sketch, fuzzed_data.ConsumeIntegral<u_int32_t>()); |
27 | 14.8k | } |
28 | 17.2k | for (i = 0; i < num_lookup; i++) { |
29 | 17.1k | ndpi_cm_sketch_count(sketch, fuzzed_data.ConsumeIntegral<u_int32_t>()); |
30 | 17.1k | } |
31 | 157 | ndpi_cm_sketch_destroy(sketch); |
32 | 157 | } |
33 | | |
34 | 165 | return 0; |
35 | 183 | } |