Coverage Report

Created: 2025-08-29 06:29

/src/ndpi/fuzz/fuzz_config.cpp
Line
Count
Source
1
#include "ndpi_api.h"
2
#include "ndpi_private.h"
3
#include "ndpi_classify.h"
4
#include "fuzz_common_code.h"
5
6
#include <stdint.h>
7
#include <stdio.h>
8
#include <assert.h>
9
#include "fuzzer/FuzzedDataProvider.h"
10
11
7.75k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
12
7.75k
  FuzzedDataProvider fuzzed_data(data, size);
13
7.75k
  struct ndpi_detection_module_struct *ndpi_info_mod;
14
7.75k
  struct ndpi_flow_struct flow;
15
7.75k
  u_int8_t protocol_was_guessed, unused;
16
7.75k
  u_int32_t i, ret;
17
7.75k
  u_int16_t bool_value;
18
7.75k
  struct ndpi_lru_cache_stats lru_stats;
19
7.75k
  struct ndpi_patricia_tree_stats patricia_stats;
20
7.75k
  struct ndpi_automa_stats automa_stats;
21
7.75k
  int cat, idx;
22
7.75k
  u_int16_t pid, pid2;
23
7.75k
  char *protoname, *protoname2;
24
7.75k
  char pids_name[32];
25
7.75k
  const char *name;
26
7.75k
  char catname[] = "name";
27
7.75k
  struct ndpi_flow_input_info input_info;
28
7.75k
  ndpi_proto p, p2;
29
7.75k
  char out[128];
30
7.75k
  struct ndpi_global_context *g_ctx;
31
7.75k
  char log_ts[32];
32
7.75k
  int value;
33
7.75k
  char cfg_value[32];
34
7.75k
  char cfg_proto[32];
35
7.75k
  char cfg_param[32];
36
7.75k
  u_int64_t cat_userdata = 0;
37
7.75k
  u_int16_t unused1, unused2;
38
7.75k
  ndpi_master_app_protocol proto1, proto2;
39
40
  /* Make allocation failures more unlikely */
41
7.75k
  if(fuzzed_data.ConsumeBool())
42
1.16k
    fuzz_set_alloc_callbacks_and_seed(size);
43
6.59k
  else
44
6.59k
    fuzz_set_alloc_callbacks_and_seed(0);
45
46
7.75k
  if(fuzzed_data.ConsumeBool())
47
1.19k
    g_ctx = ndpi_global_init();
48
6.55k
  else
49
6.55k
    g_ctx = NULL;
50
51
7.75k
  ndpi_info_mod = ndpi_init_detection_module(g_ctx);
52
53
7.75k
  set_ndpi_debug_function(ndpi_info_mod, NULL);
54
55
7.75k
  ndpi_set_user_data(ndpi_info_mod, (void *)0xabcdabcd); /* Random pointer */
56
7.75k
  ndpi_set_user_data(ndpi_info_mod, (void *)0xabcdabcd); /* Twice to trigger overwriting */
57
7.75k
  ndpi_get_user_data(ndpi_info_mod);
58
59
  /* ndpi_set_config: try to keep the soame order of the definitions in ndpi_main.c.
60
     + 1 to trigger unvalid parameter error */
61
62
7.75k
  if(fuzzed_data.ConsumeBool())
63
1.11k
    ndpi_load_protocols_file(ndpi_info_mod, "protos.txt");
64
7.75k
  if(fuzzed_data.ConsumeBool())
65
1.23k
    ndpi_load_protocols_file(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "invalid_filename"); /* Error */
66
7.75k
  if(fuzzed_data.ConsumeBool())
67
1.72k
    ndpi_load_categories_dir(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : (char *)"./");
68
7.75k
  if(fuzzed_data.ConsumeBool())
69
1.38k
    ndpi_load_categories_dir(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : (char *)"invalid_dir");
70
7.75k
  if(fuzzed_data.ConsumeBool())
71
1.71k
    ndpi_load_categories_file(ndpi_info_mod, "categories.txt", &cat_userdata);
72
7.75k
  if(fuzzed_data.ConsumeBool())
73
1.86k
    ndpi_load_categories_file(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "invalid_filename", &cat_userdata); /* Error */
74
7.75k
  if(fuzzed_data.ConsumeBool())
75
1.53k
    ndpi_load_risk_domain_file(ndpi_info_mod, "risky_domains.txt");
76
7.75k
  if(fuzzed_data.ConsumeBool())
77
1.42k
    ndpi_load_risk_domain_file(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "invalid_filename"); /* Error */
78
7.75k
  if(fuzzed_data.ConsumeBool())
79
1.60k
    ndpi_load_malicious_ja4_file(ndpi_info_mod, "ja4_fingerprints.csv");
80
7.75k
  if(fuzzed_data.ConsumeBool())
81
1.59k
    ndpi_load_malicious_ja4_file(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "invalid_filename"); /* Error */
82
7.75k
  if(fuzzed_data.ConsumeBool())
83
1.63k
    ndpi_load_malicious_sha1_file(ndpi_info_mod, "sha1_fingerprints.csv");
84
7.75k
  if(fuzzed_data.ConsumeBool())
85
1.65k
    ndpi_load_malicious_sha1_file(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "invalid_filename"); /* Error */
86
7.75k
  if(fuzzed_data.ConsumeBool())
87
1.43k
    ndpi_load_domain_suffixes(ndpi_info_mod, (char *)"public_suffix_list.dat");
88
7.75k
  if(fuzzed_data.ConsumeBool())
89
1.44k
    ndpi_load_domain_suffixes(ndpi_info_mod, (char *)"public_suffix_list.dat"); /* To trigger reload */
90
7.75k
  if(fuzzed_data.ConsumeBool())
91
1.49k
    ndpi_load_domain_suffixes(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : (char *)"invalid_filename"); /* Error */
92
  /* Note that this function is not used by ndpiReader */
93
7.75k
  if(fuzzed_data.ConsumeBool()) {
94
1.49k
    ndpi_load_ipv4_ptree(ndpi_info_mod, "invalid_filename", NDPI_PROTOCOL_TLS);
95
1.49k
    ndpi_load_ipv4_ptree(ndpi_info_mod, "ipv4_addresses.txt", NDPI_PROTOCOL_TLS);
96
1.49k
  }
97
98
  /* TODO: stub for geo stuff */
99
7.75k
  ndpi_load_geoip(ndpi_info_mod, NULL, NULL);
100
101
  /* To trigger NDPI_CFG_CONTEXT_ALREADY_INITIALIZED */
102
7.75k
  if(fuzzed_data.ConsumeBool()) {
103
1.28k
    ret = ndpi_finalize_initialization(ndpi_info_mod);
104
1.28k
    if(ret != 0) {
105
96
      ndpi_exit_detection_module(ndpi_info_mod);
106
96
      ndpi_info_mod = NULL;
107
96
    }
108
1.28k
  }
109
110
7.75k
  if(fuzzed_data.ConsumeBool()) {
111
1.61k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
112
1.61k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
113
1.61k
    ndpi_set_config(ndpi_info_mod, "http", "metadata.request_content_type", cfg_value);
114
1.61k
  }
115
7.75k
  if(fuzzed_data.ConsumeBool()) {
116
1.52k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
117
1.52k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
118
1.52k
    ndpi_set_config(ndpi_info_mod, "http", "metadata.referer", cfg_value);
119
1.52k
  }
120
7.75k
  if(fuzzed_data.ConsumeBool()) {
121
1.54k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
122
1.54k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
123
1.54k
    ndpi_set_config(ndpi_info_mod, "http", "metadata.host", cfg_value);
124
1.54k
  }
125
7.75k
  if(fuzzed_data.ConsumeBool()) {
126
1.48k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
127
1.48k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
128
1.48k
    ndpi_set_config(ndpi_info_mod, "http", "metadata.username", cfg_value);
129
1.48k
  }
130
7.75k
  if(fuzzed_data.ConsumeBool()) {
131
1.45k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
132
1.45k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
133
1.45k
    ndpi_set_config(ndpi_info_mod, "http", "metadata.password", cfg_value);
134
1.45k
  }
135
7.75k
  if(fuzzed_data.ConsumeBool()) {
136
1.79k
    value = fuzzed_data.ConsumeIntegralInRange(0, 365 + 1);
137
1.79k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
138
1.79k
    ndpi_set_config(ndpi_info_mod, "tls", "certificate_expiration_threshold", cfg_value);
139
1.79k
    ndpi_get_config(ndpi_info_mod, "tls", "certificate_expiration_threshold", cfg_value, sizeof(cfg_value));
140
1.79k
  }
141
7.75k
  if(fuzzed_data.ConsumeBool()) {
142
1.30k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
143
1.30k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
144
1.30k
    ndpi_set_config(ndpi_info_mod, "tls", "application_blocks_tracking", cfg_value);
145
1.30k
    ndpi_get_config(ndpi_info_mod, "tls", "application_blocks_tracking", cfg_value, sizeof(cfg_value));
146
1.30k
  }
147
7.75k
  if(fuzzed_data.ConsumeBool()) {
148
1.32k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x07 + 1);
149
1.32k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
150
1.32k
    ndpi_set_config(ndpi_info_mod, "tls", "dpi.heuristics", cfg_value);
151
1.32k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
152
1.32k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
153
1.32k
    ndpi_set_config(ndpi_info_mod, "tls", "dpi.heuristics.max_packets_extra_dissection", cfg_value);
154
1.32k
  }
155
7.75k
  if(fuzzed_data.ConsumeBool()) {
156
1.14k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
157
1.14k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
158
1.14k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.sha1_fingerprint", cfg_value);
159
1.14k
  }
160
7.75k
  if(fuzzed_data.ConsumeBool()) {
161
1.18k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
162
1.18k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
163
1.18k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.versions_supported", cfg_value);
164
1.18k
  }
165
7.75k
  if(fuzzed_data.ConsumeBool()) {
166
1.24k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
167
1.24k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
168
1.24k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.alpn_negotiated", cfg_value);
169
1.24k
  }
170
7.75k
  if(fuzzed_data.ConsumeBool()) {
171
1.21k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
172
1.21k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
173
1.21k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.cipher", cfg_value);
174
1.21k
  }
175
7.75k
  if(fuzzed_data.ConsumeBool()) {
176
1.30k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
177
1.30k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
178
1.30k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.cert_server_names", cfg_value);
179
1.30k
  }
180
7.75k
  if(fuzzed_data.ConsumeBool()) {
181
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
182
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
183
1.35k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.cert_validity", cfg_value);
184
1.35k
  }
185
7.75k
  if(fuzzed_data.ConsumeBool()) {
186
1.38k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
187
1.38k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
188
1.38k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.cert_issuer", cfg_value);
189
1.38k
  }
190
7.75k
  if(fuzzed_data.ConsumeBool()) {
191
1.30k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
192
1.30k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
193
1.30k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.cert_subject", cfg_value);
194
1.30k
  }
195
7.75k
  if(fuzzed_data.ConsumeBool()) {
196
1.28k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
197
1.28k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
198
1.28k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.browser", cfg_value);
199
1.28k
  }
200
7.75k
  if(fuzzed_data.ConsumeBool()) {
201
1.40k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
202
1.40k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
203
1.40k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja3s_fingerprint", cfg_value);
204
1.40k
  }
205
7.75k
  if(fuzzed_data.ConsumeBool()) {
206
1.38k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
207
1.38k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
208
1.38k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja4c_fingerprint", cfg_value);
209
1.38k
  }
210
7.75k
  if(fuzzed_data.ConsumeBool()) {
211
1.34k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
212
1.34k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
213
1.34k
    ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja4r_fingerprint", cfg_value);
214
1.34k
  }
215
7.75k
  if(fuzzed_data.ConsumeBool()) {
216
1.40k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
217
1.40k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
218
1.40k
    ndpi_set_config(ndpi_info_mod, "tls", "subclassification", cfg_value);
219
1.40k
  }
220
7.75k
  if(fuzzed_data.ConsumeBool()) {
221
1.39k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
222
1.39k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
223
1.39k
    ndpi_set_config(ndpi_info_mod, "quic", "subclassification", cfg_value);
224
1.39k
  }
225
7.75k
  if(fuzzed_data.ConsumeBool()) {
226
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
227
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
228
1.29k
    ndpi_set_config(ndpi_info_mod, "smtp", "tls_dissection", cfg_value);
229
1.29k
  }
230
7.75k
  if(fuzzed_data.ConsumeBool()) {
231
1.39k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
232
1.39k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
233
1.39k
    ndpi_set_config(ndpi_info_mod, "imap", "tls_dissection", cfg_value);
234
1.39k
  }
235
7.75k
  if(fuzzed_data.ConsumeBool()) {
236
1.43k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
237
1.43k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
238
1.43k
    ndpi_set_config(ndpi_info_mod, "pop", "tls_dissection", cfg_value);
239
1.43k
  }
240
7.75k
  if(fuzzed_data.ConsumeBool()) {
241
1.27k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
242
1.27k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
243
1.27k
    ndpi_set_config(ndpi_info_mod, "ftp", "tls_dissection", cfg_value);
244
1.27k
  }
245
7.75k
  if(fuzzed_data.ConsumeBool()) {
246
1.42k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
247
1.42k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
248
1.42k
    ndpi_set_config(ndpi_info_mod, "sip", "metadata.attribute.from", cfg_value);
249
1.42k
  }
250
7.75k
  if(fuzzed_data.ConsumeBool()) {
251
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
252
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
253
1.29k
    ndpi_set_config(ndpi_info_mod, "sip", "metadata.attribute.from_imsi", cfg_value);
254
1.29k
  }
255
7.75k
  if(fuzzed_data.ConsumeBool()) {
256
1.27k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
257
1.27k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
258
1.27k
    ndpi_set_config(ndpi_info_mod, "sip", "metadata.attribute.to", cfg_value);
259
1.27k
  }
260
7.75k
  if(fuzzed_data.ConsumeBool()) {
261
1.26k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
262
1.26k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
263
1.26k
    ndpi_set_config(ndpi_info_mod, "sip", "metadata.attribute.to_imsi", cfg_value);
264
1.26k
  }
265
7.75k
  if(fuzzed_data.ConsumeBool()) {
266
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
267
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
268
1.29k
    ndpi_set_config(ndpi_info_mod, "stun", "tls_dissection", cfg_value);
269
1.29k
  }
270
7.75k
  if(fuzzed_data.ConsumeBool()) {
271
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
272
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
273
1.29k
    ndpi_set_config(ndpi_info_mod, "stun", "max_packets_extra_dissection", cfg_value);
274
1.29k
  }
275
7.75k
  if(fuzzed_data.ConsumeBool()) {
276
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
277
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
278
1.35k
    ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.response_origin", cfg_value);
279
1.35k
  }
280
7.75k
  if(fuzzed_data.ConsumeBool()) {
281
1.22k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
282
1.22k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
283
1.22k
    ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.other_address", cfg_value);
284
1.22k
  }
285
7.75k
  if(fuzzed_data.ConsumeBool()) {
286
1.44k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
287
1.44k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
288
1.44k
    ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.mapped_address", cfg_value);
289
1.44k
  }
290
7.75k
  if(fuzzed_data.ConsumeBool()) {
291
1.34k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
292
1.34k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
293
1.34k
    ndpi_set_config(ndpi_info_mod, "bittorrent", "metadata.hash", cfg_value);
294
1.34k
  }
295
7.75k
  if(fuzzed_data.ConsumeBool()) {
296
1.37k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
297
1.37k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
298
1.37k
    ndpi_set_config(ndpi_info_mod, "ssdp", "metadata", cfg_value);
299
1.37k
  }
300
7.75k
  if(fuzzed_data.ConsumeBool()) {
301
1.31k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
302
1.31k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
303
1.31k
    ndpi_set_config(ndpi_info_mod, "dns", "subclassification", cfg_value);
304
1.31k
  }
305
7.75k
  if(fuzzed_data.ConsumeBool()) {
306
1.39k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
307
1.39k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
308
1.39k
    ndpi_set_config(ndpi_info_mod, "dns", "process_response", cfg_value);
309
1.39k
  }
310
7.75k
  if(fuzzed_data.ConsumeBool()) {
311
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
312
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
313
1.35k
    ndpi_set_config(ndpi_info_mod, "http", "process_response", cfg_value);
314
1.35k
  }
315
7.75k
  if(fuzzed_data.ConsumeBool()) {
316
1.34k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
317
1.34k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
318
1.34k
    ndpi_set_config(ndpi_info_mod, "http", "subclassification", cfg_value);
319
1.34k
  }
320
7.75k
  if(fuzzed_data.ConsumeBool()) {
321
1.34k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1);
322
1.34k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
323
1.34k
    ndpi_set_config(ndpi_info_mod, "ookla", "dpi.aggressiveness", cfg_value);
324
1.34k
  }
325
7.75k
  if(fuzzed_data.ConsumeBool()) {
326
1.34k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
327
1.34k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
328
1.34k
    ndpi_set_config(ndpi_info_mod, "zoom", "max_packets_extra_dissection", cfg_value);
329
1.34k
  }
330
7.75k
  if(fuzzed_data.ConsumeBool()) {
331
1.31k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1);
332
1.31k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
333
1.31k
    ndpi_set_config(ndpi_info_mod, "rtp", "search_for_stun", cfg_value);
334
1.31k
  }
335
7.75k
  if(fuzzed_data.ConsumeBool()) {
336
1.26k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
337
1.26k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
338
1.26k
    ndpi_set_config(ndpi_info_mod, "rtp", "max_packets_extra_dissection", cfg_value);
339
1.26k
  }
340
7.75k
  if(fuzzed_data.ConsumeBool()) {
341
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1);
342
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
343
1.35k
    ndpi_set_config(ndpi_info_mod, "openvpn", "dpi.heuristics", cfg_value);
344
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
345
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
346
1.35k
    ndpi_set_config(ndpi_info_mod, "openvpn", "dpi.heuristics.num_messages", cfg_value);
347
1.35k
  }
348
7.75k
  if(fuzzed_data.ConsumeBool()) {
349
1.40k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1);
350
1.40k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
351
1.40k
    ndpi_set_config(ndpi_info_mod, "openvpn", "subclassification_by_ip", cfg_value);
352
1.40k
  }
353
7.75k
  if(fuzzed_data.ConsumeBool()) {
354
1.32k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1);
355
1.32k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
356
1.32k
    ndpi_set_config(ndpi_info_mod, "wireguard", "subclassification_by_ip", cfg_value);
357
1.32k
  }
358
7.75k
  if(fuzzed_data.ConsumeBool()) {
359
1.46k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
360
1.46k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
361
1.46k
    ndpi_set_config(ndpi_info_mod, "any", "log", cfg_value);
362
1.46k
    ndpi_get_config(ndpi_info_mod, "any", "log", cfg_value, sizeof(cfg_value));
363
1.46k
  }
364
7.75k
  if(fuzzed_data.ConsumeBool()) {
365
1.54k
    pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_info_mod ? ndpi_info_mod->num_internal_protocols + 1 : 0); /* + 1 to trigger invalid pid */
366
1.54k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
367
1.54k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
368
1.54k
    snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid);
369
    /* TODO: we should try to map integer into name */
370
1.54k
    ndpi_set_config(ndpi_info_mod, cfg_proto, "log", cfg_value);
371
1.54k
    ndpi_get_config(ndpi_info_mod, cfg_proto, "log", cfg_value, sizeof(cfg_value));
372
1.54k
  }
373
7.75k
  if(fuzzed_data.ConsumeBool()) {
374
1.44k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
375
1.44k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
376
1.44k
    ndpi_set_config(ndpi_info_mod, "any", "ip_list.load", cfg_value);
377
1.44k
    ndpi_get_config(ndpi_info_mod, "any", "ip_list.load", cfg_value, sizeof(cfg_value));
378
1.44k
  }
379
7.75k
  if(fuzzed_data.ConsumeBool()) {
380
1.49k
    pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_info_mod ? ndpi_info_mod->num_internal_protocols + 1 : 0); /* + 1 to trigger invalid pid */
381
1.49k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
382
1.49k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
383
1.49k
    snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid);
384
1.49k
    ndpi_set_config(ndpi_info_mod, cfg_proto, "ip_list.load", cfg_value);
385
1.49k
    ndpi_get_config(ndpi_info_mod, cfg_proto, "ip_list.load", cfg_value, sizeof(cfg_value));
386
1.49k
  }
387
7.75k
  if(fuzzed_data.ConsumeBool()) {
388
1.35k
    pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_info_mod ? ndpi_info_mod->num_internal_protocols + 1 : 0); /* + 1 to trigger invalid pid */
389
1.35k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
390
1.35k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
391
1.35k
    snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid);
392
1.35k
    ndpi_set_config(ndpi_info_mod, cfg_proto, "monitoring", cfg_value);
393
1.35k
  }
394
7.75k
  if(fuzzed_data.ConsumeBool()) {
395
1.45k
    pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_info_mod ? ndpi_info_mod->num_internal_protocols + 1 : 0); /* + 1 to trigger invalid pid */
396
1.45k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
397
1.45k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
398
1.45k
    snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid);
399
1.45k
    ndpi_set_config(ndpi_info_mod, cfg_proto, "enable", cfg_value);
400
1.45k
  }
401
7.75k
  if(fuzzed_data.ConsumeBool()) {
402
1.30k
    value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1);
403
1.30k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
404
1.30k
    ndpi_set_config(ndpi_info_mod, NULL, "packets_limit_per_flow", cfg_value);
405
1.30k
  }
406
7.75k
  if(fuzzed_data.ConsumeBool()) {
407
1.42k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
408
1.42k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
409
1.42k
    ndpi_set_config(ndpi_info_mod, NULL, "flow.direction_detection", cfg_value);
410
1.42k
  }
411
7.75k
  if(fuzzed_data.ConsumeBool()) {
412
1.59k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
413
1.59k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
414
1.59k
    ndpi_set_config(ndpi_info_mod, NULL, "flow.track_payload", cfg_value);
415
1.59k
  }
416
7.75k
  if(fuzzed_data.ConsumeBool()) {
417
1.42k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
418
1.42k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
419
1.42k
    ndpi_set_config(ndpi_info_mod, NULL, "flow.use_client_ip_in_guess", cfg_value);
420
1.42k
  }
421
7.75k
  if(fuzzed_data.ConsumeBool()) {
422
1.43k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
423
1.43k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
424
1.43k
    ndpi_set_config(ndpi_info_mod, NULL, "flow.use_client_port_in_guess", cfg_value);
425
1.43k
  }
426
7.75k
  if(fuzzed_data.ConsumeBool()) {
427
1.48k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
428
1.48k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
429
1.48k
    ndpi_set_config(ndpi_info_mod, NULL, "tcp_ack_payload_heuristic", cfg_value);
430
1.48k
  }
431
7.75k
  if(fuzzed_data.ConsumeBool()) {
432
1.50k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
433
1.50k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
434
1.50k
    ndpi_set_config(ndpi_info_mod, NULL, "fully_encrypted_heuristic", cfg_value);
435
1.50k
  }
436
7.75k
  if(fuzzed_data.ConsumeBool()) {
437
1.41k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
438
1.41k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
439
1.41k
    ndpi_set_config(ndpi_info_mod, NULL, "libgcrypt.init", cfg_value);
440
1.41k
  }
441
7.75k
  if(fuzzed_data.ConsumeBool()) {
442
1.41k
    value = fuzzed_data.ConsumeIntegralInRange(0, 0x03 + 1);
443
1.41k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
444
1.41k
    ndpi_set_config(ndpi_info_mod, NULL, "dpi.guess_on_giveup", cfg_value);
445
1.41k
  }
446
7.75k
  if(fuzzed_data.ConsumeBool()) {
447
1.51k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
448
1.51k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
449
1.51k
    ndpi_set_config(ndpi_info_mod, NULL, "dpi.guess_ip_before_port", cfg_value);
450
1.51k
  }
451
7.75k
  if(fuzzed_data.ConsumeBool()) {
452
1.42k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
453
1.42k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
454
1.42k
    ndpi_set_config(ndpi_info_mod, NULL, "dpi.compute_entropy", cfg_value);
455
1.42k
  }
456
7.75k
  if(fuzzed_data.ConsumeBool()) {
457
1.41k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
458
1.41k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
459
1.41k
    ndpi_set_config(ndpi_info_mod, NULL, "dpi.address_cache_size", cfg_value);
460
1.41k
  }
461
7.75k
  if(fuzzed_data.ConsumeBool()) {
462
1.48k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
463
1.48k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
464
1.48k
    ndpi_set_config(ndpi_info_mod, NULL, "hostname_dns_check", cfg_value);
465
1.48k
  }
466
7.75k
  if(fuzzed_data.ConsumeBool()) {
467
1.43k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
468
1.43k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
469
1.43k
    ndpi_set_config(ndpi_info_mod, NULL, "fpc", cfg_value);
470
1.43k
  }
471
7.75k
  if(fuzzed_data.ConsumeBool()) {
472
1.44k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
473
1.44k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
474
1.44k
    ndpi_set_config(ndpi_info_mod, NULL, "metadata.tcp_fingerprint", cfg_value);
475
1.44k
  }
476
7.75k
  if(fuzzed_data.ConsumeBool()) {
477
1.48k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
478
1.48k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
479
1.48k
    ndpi_set_config(ndpi_info_mod, NULL, "metadata.tcp_fingerprint_raw", cfg_value);
480
1.48k
  }
481
7.75k
  if(fuzzed_data.ConsumeBool()) {
482
1.55k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
483
1.55k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
484
1.55k
    ndpi_set_config(ndpi_info_mod, NULL, "metadata.tcp_fingerprint_format", cfg_value);
485
1.55k
  }
486
7.75k
  if(fuzzed_data.ConsumeBool()) {
487
1.52k
    pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, NDPI_MAX_RISK + 1); /* + 1 to trigger invalid pid */
488
1.52k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
489
1.52k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
490
1.52k
    if(fuzzed_data.ConsumeBool() && pid < NDPI_MAX_RISK)
491
864
      snprintf(cfg_param, sizeof(cfg_param), "flow_risk.%s", ndpi_risk_shortnames[pid]);
492
664
    else
493
664
      snprintf(cfg_param, sizeof(cfg_param), "flow_risk.%d", pid);
494
1.52k
    ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value);
495
1.52k
    ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value));
496
497
1.52k
    if(fuzzed_data.ConsumeBool() && pid < NDPI_MAX_RISK)
498
814
      snprintf(cfg_param, sizeof(cfg_param), "flow_risk.%s.info", ndpi_risk_shortnames[pid]);
499
714
    else
500
714
      snprintf(cfg_param, sizeof(cfg_param), "flow_risk.%d.info", pid);
501
1.52k
    ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value);
502
1.52k
    ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value));
503
1.52k
  }
504
7.75k
  if(fuzzed_data.ConsumeBool()) {
505
1.46k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
506
1.46k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
507
1.46k
    ndpi_set_config(ndpi_info_mod, NULL, "flow_risk_lists.load", cfg_value);
508
1.46k
  }
509
7.75k
  if(fuzzed_data.ConsumeBool()) {
510
1.48k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
511
1.48k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
512
1.48k
    ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.anonymous_subscriber.list.icloudprivaterelay.load", cfg_value);
513
1.48k
  }
514
7.75k
  if(fuzzed_data.ConsumeBool()) {
515
1.47k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
516
1.47k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
517
1.47k
    ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.anonymous_subscriber.list.protonvpn.load", cfg_value);
518
1.47k
  }
519
7.75k
  if(fuzzed_data.ConsumeBool()) {
520
1.46k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
521
1.46k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
522
1.46k
    ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.crawler_bot.list.load", cfg_value);
523
1.46k
  }
524
7.75k
  if(fuzzed_data.ConsumeBool()) {
525
1.48k
    ndpi_set_config(ndpi_info_mod, NULL, "filename.config", fuzzed_data.ConsumeBool() ? NULL : (char *)"config.txt");
526
1.48k
    ndpi_get_config(ndpi_info_mod, NULL, "filename.config", cfg_value, sizeof(cfg_value));
527
1.48k
  }
528
7.75k
  if(fuzzed_data.ConsumeBool()) {
529
1.44k
    value = fuzzed_data.ConsumeIntegralInRange(0, 3 + 1);
530
1.44k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
531
1.44k
    ndpi_set_config(ndpi_info_mod, NULL, "log.level", cfg_value);
532
1.44k
  }
533
7.75k
  if(fuzzed_data.ConsumeBool()) {
534
1.39k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
535
1.39k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
536
1.39k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.size", cfg_value);
537
1.39k
  }
538
7.75k
  if(fuzzed_data.ConsumeBool()) {
539
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
540
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
541
1.29k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.ttl", cfg_value);
542
1.29k
  }
543
7.75k
  if(fuzzed_data.ConsumeBool()) {
544
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
545
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
546
1.29k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.scope", cfg_value);
547
1.29k
  }
548
7.75k
  if(fuzzed_data.ConsumeBool()) {
549
1.41k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
550
1.41k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
551
1.41k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.size", cfg_value);
552
1.41k
  }
553
7.75k
  if(fuzzed_data.ConsumeBool()) {
554
1.25k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
555
1.25k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
556
1.25k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.ttl", cfg_value);
557
1.25k
  }
558
7.75k
  if(fuzzed_data.ConsumeBool()) {
559
1.17k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
560
1.17k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
561
1.17k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.scope", cfg_value);
562
1.17k
  }
563
7.75k
  if(fuzzed_data.ConsumeBool()) {
564
1.24k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
565
1.24k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
566
1.24k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.size", cfg_value);
567
1.24k
  }
568
7.75k
  if(fuzzed_data.ConsumeBool()) {
569
1.13k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
570
1.13k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
571
1.13k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.ttl", cfg_value);
572
1.13k
  }
573
7.75k
  if(fuzzed_data.ConsumeBool()) {
574
1.18k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
575
1.18k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
576
1.18k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.scope", cfg_value);
577
1.18k
  }
578
7.75k
  if(fuzzed_data.ConsumeBool()) {
579
1.15k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
580
1.15k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
581
1.15k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.size", cfg_value);
582
1.15k
  }
583
7.75k
  if(fuzzed_data.ConsumeBool()) {
584
1.14k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
585
1.14k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
586
1.14k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.ttl", cfg_value);
587
1.14k
  }
588
7.75k
  if(fuzzed_data.ConsumeBool()) {
589
1.22k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
590
1.22k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
591
1.22k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.scope", cfg_value);
592
1.22k
  }
593
7.75k
  if(fuzzed_data.ConsumeBool()) {
594
1.22k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
595
1.22k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
596
1.22k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.size", cfg_value);
597
1.22k
  }
598
7.75k
  if(fuzzed_data.ConsumeBool()) {
599
1.18k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
600
1.18k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
601
1.18k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.ttl", cfg_value);
602
1.18k
  }
603
7.75k
  if(fuzzed_data.ConsumeBool()) {
604
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
605
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
606
1.29k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.scope", cfg_value);
607
1.29k
  }
608
7.75k
  if(fuzzed_data.ConsumeBool()) {
609
1.30k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
610
1.30k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
611
1.30k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.size", cfg_value);
612
1.30k
  }
613
7.75k
  if(fuzzed_data.ConsumeBool()) {
614
1.28k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
615
1.28k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
616
1.28k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.ttl", cfg_value);
617
1.28k
  }
618
7.75k
  if(fuzzed_data.ConsumeBool()) {
619
1.18k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
620
1.18k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
621
1.18k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.scope", cfg_value);
622
1.18k
  }
623
7.75k
  if(fuzzed_data.ConsumeBool()) {
624
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
625
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
626
1.29k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.fpc_dns.size", cfg_value);
627
1.29k
  }
628
7.75k
  if(fuzzed_data.ConsumeBool()) {
629
1.22k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
630
1.22k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
631
1.22k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.fpc_dns.ttl", cfg_value);
632
1.22k
  }
633
7.75k
  if(fuzzed_data.ConsumeBool()) {
634
1.31k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
635
1.31k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
636
1.31k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.fpc_dns.scope", cfg_value);
637
1.31k
  }
638
7.75k
  if(fuzzed_data.ConsumeBool()) {
639
1.24k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
640
1.24k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
641
1.24k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.signal.size", cfg_value);
642
1.24k
  }
643
7.75k
  if(fuzzed_data.ConsumeBool()) {
644
1.27k
    value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
645
1.27k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
646
1.27k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.signal.ttl", cfg_value);
647
1.27k
  }
648
7.75k
  if(fuzzed_data.ConsumeBool()) {
649
1.27k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
650
1.27k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
651
1.27k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.signal.scope", cfg_value);
652
1.27k
  }
653
  /* Configure one cache via index */
654
7.75k
  if(fuzzed_data.ConsumeBool()) {
655
1.24k
    idx = fuzzed_data.ConsumeIntegralInRange(0, static_cast<int>(NDPI_LRUCACHE_MAX));
656
1.24k
    name = ndpi_lru_cache_idx_to_name(static_cast<lru_cache_type>(idx));
657
1.24k
    if(name) {
658
1.24k
      value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */
659
1.24k
      snprintf(cfg_param, sizeof(cfg_param), "lru.%s.size", name);
660
1.24k
      snprintf(cfg_value, sizeof(cfg_value), "%d", value);
661
1.24k
      ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value);
662
1.24k
      ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value));
663
1.24k
      value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1);
664
1.24k
      snprintf(cfg_param, sizeof(cfg_param), "lru.%s.ttl", name);
665
1.24k
      snprintf(cfg_value, sizeof(cfg_value), "%d", value);
666
1.24k
      ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value);
667
1.24k
      value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
668
1.24k
      snprintf(cfg_param, sizeof(cfg_param), "lru.%s.scope", name);
669
1.24k
      snprintf(cfg_value, sizeof(cfg_value), "%d", value);
670
1.24k
      ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value);
671
1.24k
      ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value));
672
1.24k
    }
673
1.24k
  }
674
  /* Invalid parameter */
675
7.75k
  if(fuzzed_data.ConsumeBool()) {
676
1.29k
    value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1);
677
1.29k
    snprintf(cfg_value, sizeof(cfg_value), "%d", value);
678
1.29k
    ndpi_set_config(ndpi_info_mod, NULL, "foo", cfg_value);
679
1.29k
    ndpi_get_config(ndpi_info_mod, NULL, "foo", cfg_value, sizeof(cfg_value));
680
1.29k
  }
681
  /* Invalid value */
682
7.75k
  if(fuzzed_data.ConsumeBool()) {
683
1.42k
    snprintf(cfg_value, sizeof(cfg_value), "%s", "jjj");
684
1.42k
    ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.ttl", cfg_value);
685
1.42k
    ndpi_get_config(ndpi_info_mod, NULL, "lru.stun.ttl", cfg_value, sizeof(cfg_value));
686
1.42k
  }
687
688
7.75k
  ndpi_add_host_risk_mask(ndpi_info_mod,
689
7.75k
                          (char *)fuzzed_data.ConsumeBytesAsString(32).c_str(),
690
7.75k
                          static_cast<ndpi_risk>(fuzzed_data.ConsumeIntegral<u_int64_t>()));
691
692
7.75k
  ret = ndpi_finalize_initialization(ndpi_info_mod);
693
7.75k
  if(ret != 0) {
694
524
    ndpi_exit_detection_module(ndpi_info_mod);
695
524
    ndpi_info_mod = NULL;
696
524
  }
697
698
  /* Random protocol configuration */
699
7.75k
  pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_get_num_protocols(ndpi_info_mod) + 1); /* + 1 to trigger invalid pid */
700
7.75k
  protoname = ndpi_get_proto_by_id(ndpi_info_mod, pid);
701
7.75k
  if (protoname) {
702
7.18k
    ndpi_get_proto_by_name(ndpi_info_mod, protoname);
703
704
7.18k
    pid2 = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, ndpi_get_num_protocols(ndpi_info_mod) + 1); /* + 1 to trigger invalid pid */
705
7.18k
    protoname2 = ndpi_get_proto_by_id(ndpi_info_mod, pid2);
706
7.18k
    if(protoname2) {
707
7.15k
      snprintf(pids_name, sizeof(pids_name), "%s.%s", protoname, protoname2);
708
7.15k
      pids_name[sizeof(pids_name) - 1] = '\0';
709
7.15k
      ndpi_get_protocol_by_name(ndpi_info_mod, pids_name);
710
7.15k
    }
711
7.18k
  }
712
7.75k
  ndpi_map_user_proto_id_to_ndpi_id(ndpi_info_mod, pid);
713
7.75k
  ndpi_map_ndpi_id_to_user_proto_id(ndpi_info_mod, pid);
714
7.75k
  ndpi_set_proto_breed(ndpi_info_mod, pid, NDPI_PROTOCOL_SAFE);
715
7.75k
  ndpi_set_proto_category(ndpi_info_mod, pid, NDPI_PROTOCOL_CATEGORY_MEDIA);
716
7.75k
  ndpi_is_subprotocol_informative(ndpi_info_mod, pid);
717
7.75k
  ndpi_get_proto_breed(ndpi_info_mod, pid);
718
719
7.75k
  ndpi_get_proto_by_name(ndpi_info_mod, NULL); /* Error */
720
7.75k
  ndpi_get_proto_by_name(ndpi_info_mod, "foo"); /* Invalid protocol */
721
7.75k
  ndpi_get_proto_name(ndpi_info_mod, pid);
722
7.75k
  ndpi_find_protocol_qoe(ndpi_info_mod, pid);
723
724
7.75k
  ndpi_ips_match(fuzzed_data.ConsumeIntegral<u_int32_t>(),
725
7.75k
                 fuzzed_data.ConsumeIntegral<u_int32_t>(),
726
7.75k
                 fuzzed_data.ConsumeIntegral<u_int32_t>(),
727
7.75k
                 fuzzed_data.ConsumeIntegralInRange(0,32));
728
729
7.75k
  struct in_addr pin;
730
7.75k
  struct in6_addr pin6;
731
7.75k
  u_int16_t suffix_id;
732
  
733
7.75k
  pin.s_addr = fuzzed_data.ConsumeIntegral<u_int32_t>();
734
7.75k
  ndpi_network_port_ptree_match(ndpi_info_mod, &pin, fuzzed_data.ConsumeIntegral<u_int16_t>());
735
131k
  for(i = 0; i < 16; i++)
736
124k
    pin6.s6_addr[i] = fuzzed_data.ConsumeIntegral<u_int8_t>();
737
7.75k
  ndpi_network_port_ptree6_match(ndpi_info_mod, &pin6, fuzzed_data.ConsumeIntegral<u_int16_t>());
738
7.75k
  ndpi_network_ptree6_match(ndpi_info_mod, &pin6);
739
740
7.75k
  ndpi_get_host_domain_suffix(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "www.bbc.co.uk", &suffix_id);
741
7.75k
  ndpi_get_host_domain(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "www.bbc.co.uk");
742
743
  /* Custom category configuration */
744
7.75k
  cat = fuzzed_data.ConsumeIntegralInRange(static_cast<int>(NDPI_PROTOCOL_CATEGORY_CUSTOM_1),
745
7.75k
                                           static_cast<int>(NDPI_PROTOCOL_NUM_CATEGORIES + 1)); /* + 1 to trigger invalid cat */
746
7.75k
  ndpi_category_set_name(ndpi_info_mod, static_cast<ndpi_protocol_category_t>(cat), catname);
747
7.75k
  ndpi_is_custom_category(static_cast<ndpi_protocol_category_t>(cat));
748
7.75k
  ndpi_category_get_name(ndpi_info_mod, static_cast<ndpi_protocol_category_t>(cat));
749
7.75k
  ndpi_get_category_id(ndpi_info_mod, catname);
750
751
7.75k
  ndpi_tunnel2str(static_cast<ndpi_packet_tunnel>(fuzzed_data.ConsumeIntegralInRange(static_cast<int>(ndpi_no_tunnel),
752
7.75k
                                                                                     static_cast<int>(ndpi_gre_tunnel + 1)))); /* + 1 to trigger invalid value */
753
754
7.75k
  ndpi_get_num_protocols(ndpi_info_mod);
755
7.75k
  ndpi_get_proto_defaults(ndpi_info_mod);
756
757
7.75k
  ndpi_dump_protocols(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : stdout);
758
7.75k
  if(fuzzed_data.ConsumeBool())
759
2.47k
    ndpi_generate_options(fuzzed_data.ConsumeIntegralInRange(0, 4), fuzzed_data.ConsumeBool() ? NULL : stdout);
760
7.75k
  ndpi_dump_risks_score(fuzzed_data.ConsumeBool() ? NULL : stdout);
761
7.75k
  ndpi_dump_config(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : stdout);
762
763
7.75k
  char buf[8]; /* Too short in same cases... */
764
7.75k
  if(fuzzed_data.ConsumeBool()) {
765
2.26k
    ndpi_ssl_version2str(buf, sizeof(buf), fuzzed_data.ConsumeIntegral<u_int16_t>(), &unused);
766
2.26k
    if(fuzzed_data.ConsumeBool())
767
1.44k
      ndpi_multimedia_flowtype2str(buf, sizeof(buf),  static_cast<ndpi_multimedia_flow_type>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
768
814
    else
769
814
      ndpi_multimedia_flowtype2str(NULL, 0,  static_cast<ndpi_multimedia_flow_type>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
770
2.26k
    ndpi_get_ip_proto_name(fuzzed_data.ConsumeIntegral<u_int8_t>(), buf, sizeof(buf));
771
5.49k
  } else {
772
5.49k
    ndpi_ssl_version2str(NULL, 0, fuzzed_data.ConsumeIntegral<u_int16_t>(), &unused);
773
5.49k
    ndpi_get_ip_proto_name(fuzzed_data.ConsumeIntegral<u_int8_t>(), NULL, 0);
774
5.49k
  }
775
7.75k
  ndpi_risk2str(static_cast<ndpi_risk_enum>(fuzzed_data.ConsumeIntegral<u_int64_t>()));
776
7.75k
  ndpi_risk2code(static_cast<ndpi_risk_enum>(fuzzed_data.ConsumeIntegral<u_int64_t>()));
777
7.75k
  ndpi_code2risk(ndpi_risk2code(static_cast<ndpi_risk_enum>(fuzzed_data.ConsumeIntegralInRange(0, NDPI_MAX_RISK + 1))));
778
7.75k
  u_int16_t client_score, server_score;
779
7.75k
  ndpi_risk2score(static_cast<ndpi_risk_enum>(fuzzed_data.ConsumeIntegralInRange(0, NDPI_MAX_RISK + 1)), &client_score, &server_score);
780
7.75k
  ndpi_severity2str(static_cast<ndpi_risk_severity>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
781
7.75k
  ndpi_risk2score(static_cast<ndpi_risk_enum>(fuzzed_data.ConsumeIntegral<u_int64_t>()), &unused1, &unused2);
782
7.75k
  ndpi_http_method2str(static_cast<ndpi_http_method>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
783
7.75k
  ndpi_confidence_get_name(static_cast<ndpi_confidence_t>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
784
7.75k
  ndpi_fpc_confidence_get_name(static_cast<ndpi_fpc_confidence_t>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
785
7.75k
  ndpi_get_breed_by_name(ndpi_get_proto_breed_name(static_cast<ndpi_protocol_breed_t>(fuzzed_data.ConsumeIntegral<u_int8_t>())));
786
7.75k
  ndpi_get_l4_proto_name(static_cast<ndpi_l4_proto_info>(fuzzed_data.ConsumeIntegral<u_int8_t>()));
787
7.75k
  proto1.app_protocol = fuzzed_data.ConsumeIntegral<u_int16_t>();
788
7.75k
  proto1.master_protocol = fuzzed_data.ConsumeIntegral<u_int16_t>();
789
7.75k
  ndpi_is_proto_unknown(proto1);
790
7.75k
  proto2.app_protocol = fuzzed_data.ConsumeIntegral<u_int16_t>();
791
7.75k
  proto2.master_protocol = fuzzed_data.ConsumeIntegral<u_int16_t>();
792
7.75k
  ndpi_is_proto_equals(proto1, proto2, fuzzed_data.ConsumeBool());
793
794
7.75k
  ndpi_rtp_payload_type2str(fuzzed_data.ConsumeIntegral<u_int8_t>(), fuzzed_data.ConsumeIntegral<u_int32_t>());
795
7.75k
  ndpi_rtp_payload_type2str(127, fuzzed_data.ConsumeIntegral<u_int32_t>());
796
797
7.75k
  char buf2[16];
798
7.75k
  ndpi_entropy2str(fuzzed_data.ConsumeFloatingPoint<float>(), fuzzed_data.ConsumeBool() ? buf2 : NULL, sizeof(buf2));
799
800
  /* Basic code to try testing this "config" */
801
7.75k
  bool_value = fuzzed_data.ConsumeBool();
802
7.75k
  input_info.in_pkt_dir = fuzzed_data.ConsumeIntegralInRange(0,2);
803
7.75k
  input_info.seen_flow_beginning = !!fuzzed_data.ConsumeBool();
804
7.75k
  memset(&flow, 0, sizeof(flow));
805
7.75k
  std::vector<uint8_t>pkt = fuzzed_data.ConsumeRemainingBytes<uint8_t>();
806
807
7.75k
  const u_int8_t *l4_return;
808
7.75k
  u_int16_t l4_len_return;
809
7.75k
  u_int8_t l4_protocol_return;
810
7.75k
  ndpi_detection_get_l4(pkt.data(), pkt.size(), &l4_return, &l4_len_return, &l4_protocol_return, NDPI_DETECTION_ONLY_IPV6);
811
7.75k
  ndpi_detection_get_l4(pkt.data(), pkt.size(), &l4_return, &l4_len_return, &l4_protocol_return, NDPI_DETECTION_ONLY_IPV4);
812
813
7.75k
  ndpi_detection_process_packet(ndpi_info_mod, &flow, pkt.data(), pkt.size(), 0, &input_info);
814
7.75k
  p = ndpi_detection_giveup(ndpi_info_mod, &flow, &protocol_was_guessed);
815
816
7.75k
  assert(p.proto.master_protocol == ndpi_get_flow_masterprotocol(&flow));
817
7.75k
  assert(p.proto.app_protocol == ndpi_get_flow_appprotocol(&flow));
818
7.75k
  assert(p.category == ndpi_get_flow_category(&flow));
819
7.75k
  ndpi_is_master_only_protocol(ndpi_info_mod, p.proto.app_protocol);
820
7.75k
  ndpi_normalize_protocol(ndpi_info_mod, &p.proto);
821
7.75k
  assert(ndpi_stack_get_upper_proto(&p.protocol_stack) == ndpi_get_upper_proto(p));
822
7.75k
  assert(ndpi_stack_get_lower_proto(&p.protocol_stack) == ndpi_get_lower_proto(p));
823
7.75k
  ndpi_get_flow_error_code(&flow);
824
7.75k
  ndpi_get_flow_risk_info(&flow, out, sizeof(out), 1);
825
7.75k
  ndpi_get_flow_ndpi_proto(&flow, &p2);
826
7.75k
  ndpi_is_proto(p.proto, NDPI_PROTOCOL_TLS);
827
7.75k
  ndpi_http_method2str(flow.http.method);
828
7.75k
  ndpi_is_subprotocol_informative(ndpi_info_mod, p.proto.app_protocol);
829
7.75k
  ndpi_get_flow_name(bool_value ? &flow : NULL);
830
  /* ndpi_guess_undetected_protocol() is a "strange" function. Try fuzzing it, here */
831
7.75k
  if(!ndpi_is_protocol_detected(p)) {
832
4.79k
    ndpi_guess_undetected_protocol(ndpi_info_mod, bool_value ? &flow : NULL,
833
4.79k
                                   flow.l4_proto);
834
4.79k
    if(!flow.is_ipv6) {
835
      /* Another "strange" function (ipv4 only): fuzz it here, for lack of a better alternative */
836
4.55k
      ndpi_find_ipv4_category_userdata(ndpi_info_mod, flow.c_address.v4);
837
838
4.55k
      ndpi_search_tcp_or_udp_raw(ndpi_info_mod, NULL, ntohl(flow.c_address.v4), ntohl(flow.s_address.v4));
839
840
4.55k
      ndpi_guess_undetected_protocol_v4(ndpi_info_mod, bool_value ? &flow : NULL,
841
4.55k
                                        flow.l4_proto,
842
4.55k
                                        flow.c_address.v4, flow.c_port,
843
4.55k
                                        flow.s_address.v4, flow.s_port);
844
4.55k
    } else {
845
231
      ndpi_find_ipv6_category_userdata(ndpi_info_mod, bool_value ? NULL : (struct in6_addr *)flow.c_address.v6);
846
231
    }
847
    /* Another "strange" function: fuzz it here, for lack of a better alternative */
848
4.79k
    ndpi_search_tcp_or_udp(ndpi_info_mod, &flow);
849
4.79k
  }
850
7.75k
  if(!flow.is_ipv6) {
851
7.50k
    if(bool_value)
852
2.23k
      ndpi_network_risk_ptree_match(ndpi_info_mod, (struct in_addr *)&flow.c_address.v4);
853
854
7.50k
    ndpi_risk_params params[] = { { NDPI_PARAM_HOSTNAME, flow.host_server_name},
855
7.50k
                                  { NDPI_PARAM_ISSUER_DN, (void *)("CN=813845657003339838, O=Code42, OU=TEST, ST=MN, C=US") /* from example/protos.txt */},
856
7.50k
                                  { NDPI_PARAM_HOST_IPV4, &flow.c_address.v4} };
857
7.50k
    ndpi_check_flow_risk_exceptions(ndpi_info_mod, 3, params);
858
859
7.50k
    ndpi_risk_params params2[] = { { NDPI_MAX_RISK_PARAM_ID, &flow.c_address.v4} }; /* Invalid */
860
7.50k
    ndpi_check_flow_risk_exceptions(ndpi_info_mod, 1, params2);
861
7.50k
  }
862
  /* TODO: stub for geo stuff */
863
7.75k
  ndpi_get_geoip_asn(ndpi_info_mod, NULL, NULL);
864
7.75k
  ndpi_get_geoip_aso(ndpi_info_mod, NULL, NULL, 0);
865
7.75k
  ndpi_get_geoip_country_continent(ndpi_info_mod, NULL, NULL, 0, NULL, 0);
866
7.75k
  ndpi_get_geoip_country_continent_city(ndpi_info_mod, NULL, NULL, 0, NULL, 0, NULL, 0);
867
868
7.75k
  ndpi_free_flow_data(&flow);
869
870
  /* Get some final stats */
871
77.5k
  for(i = 0; i < NDPI_LRUCACHE_MAX + 1; i++) /* + 1 to test invalid type */
872
69.7k
    ndpi_get_lru_cache_stats(g_ctx, ndpi_info_mod, static_cast<lru_cache_type>(i), &lru_stats);
873
62.0k
  for(i = 0; i < NDPI_PTREE_MAX + 1; i++) /* + 1 to test invalid type */
874
54.2k
    ndpi_get_patricia_stats(ndpi_info_mod, static_cast<ptree_type>(i), &patricia_stats);
875
7.75k
  ndpi_patricia_get_stats(NULL, &patricia_stats);
876
54.2k
  for(i = 0; i < NDPI_AUTOMA_MAX + 1; i++) /* + 1 to test invalid type */
877
46.5k
    ndpi_get_automa_stats(ndpi_info_mod, static_cast<automa_type>(i), &automa_stats);
878
879
880
7.75k
  ndpi_revision();
881
7.75k
  ndpi_get_api_version();
882
7.75k
  ndpi_get_gcrypt_version();
883
884
7.75k
  ndpi_get_ndpi_detection_module_size();
885
7.75k
  ndpi_detection_get_sizeof_ndpi_flow_struct();
886
887
7.75k
  ndpi_get_tot_allocated_memory();
888
7.75k
  ndpi_log_timestamp(log_ts, sizeof(log_ts));
889
890
7.75k
  ndpi_free_geoip(ndpi_info_mod);
891
892
7.75k
  ndpi_exit_detection_module(ndpi_info_mod);
893
894
7.75k
  ndpi_global_deinit(g_ctx);
895
896
7.75k
  return 0;
897
7.75k
}