Coverage Report

Created: 2025-11-06 06:43

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