/src/ndpi/fuzz/fuzz_process_packet.c
Line | Count | Source |
1 | | #include "ndpi_api.h" |
2 | | #include "fuzz_common_code.h" |
3 | | |
4 | | #include <stdint.h> |
5 | | #include <stdio.h> |
6 | | |
7 | | struct ndpi_detection_module_struct *ndpi_info_mod = NULL; |
8 | | struct ndpi_flow_struct ndpi_flow; |
9 | | static ndpi_serializer json_serializer = {}; |
10 | | static ndpi_serializer csv_serializer = {}; |
11 | | |
12 | | static char *path = NULL; |
13 | | |
14 | 42 | int LLVMFuzzerInitialize(int *argc, char ***argv) { |
15 | 42 | (void)argc; |
16 | | |
17 | 42 | path = dirname(strdup(*argv[0])); /* No errors; no free! */ |
18 | 42 | return 0; |
19 | 42 | } |
20 | | |
21 | 48.3k | int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { |
22 | 48.3k | if (ndpi_info_mod == NULL) { |
23 | 5 | fuzz_init_detection_module(&ndpi_info_mod, NULL, path); |
24 | | |
25 | 5 | ndpi_init_serializer(&json_serializer, ndpi_serialization_format_json); |
26 | 5 | ndpi_init_serializer(&csv_serializer, ndpi_serialization_format_csv); |
27 | 5 | } |
28 | | |
29 | 48.3k | memset(&ndpi_flow, 0, SIZEOF_FLOW_STRUCT); |
30 | 48.3k | ndpi_protocol detected_protocol = |
31 | 48.3k | ndpi_detection_process_packet(ndpi_info_mod, &ndpi_flow, Data, Size, 0, NULL); |
32 | 48.3k | detected_protocol = ndpi_detection_giveup(ndpi_info_mod, &ndpi_flow); |
33 | | |
34 | 48.3k | ndpi_reset_serializer(&json_serializer); |
35 | 48.3k | ndpi_reset_serializer(&csv_serializer); |
36 | 48.3k | ndpi_dpi2json(ndpi_info_mod, &ndpi_flow, detected_protocol, &json_serializer); |
37 | 48.3k | ndpi_dpi2json(ndpi_info_mod, &ndpi_flow, detected_protocol, &csv_serializer); |
38 | 48.3k | ndpi_free_flow_data(&ndpi_flow); |
39 | | |
40 | 48.3k | return 0; |
41 | 48.3k | } |