nDPI/fuzz/fuzz_alg_memmem.cpp
Ivan Nardi c3ba65311e
fuzzing: improve coverage (#2495)
Fix detection of WebDAV and Gnutella (over HTTP)
Fix detection of z3950

Add two fuzzers to test `ndpi_memmem()` and `ndpi_strnstr()`

Remove some dead code:
* RTP: the same exact check is performed at the very beginning of the
function
* MQTT: use a better helper to exclude the protocol
* Colletd: `ndpi_hostname_sni_set()` never fails

Update pl7m code (fix a Use-of-uninitialized-value error)
2024-07-12 14:22:25 +02:00

35 lines
996 B
C++

#include "ndpi_api.h"
#include "fuzzer/FuzzedDataProvider.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FuzzedDataProvider fuzzed_data(data, size);
char dst[256];
uint8_t *h;
int h_len, needle_len = 0, needle_start = 0;
/* No real memory allocations involved */
/* 1: needle is a subset of haystack */
std::vector<uint8_t>haystack = fuzzed_data.ConsumeBytes<uint8_t>(512);
h = haystack.data();
h_len = haystack.size();
if(h_len > 1) {
needle_start = fuzzed_data.ConsumeIntegralInRange(0, h_len - 1);
needle_len = fuzzed_data.ConsumeIntegralInRange(0, h_len - needle_start - 1);
}
ndpi_memmem(h, h_len, &h[needle_start], needle_len);
/* 2: fully random */
std::vector<uint8_t>needle = fuzzed_data.ConsumeBytes<uint8_t>(512);
ndpi_memmem(h, h_len, needle.data(), needle.size());
/* Let use this fuzzer to check also this simple function... */
ndpi_strlcpy(dst, (const char *)h, sizeof(dst), h_len);
return 0;
}