Coverage Report

Created: 2025-11-02 06:47

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