aboutsummaryrefslogtreecommitdiff
path: root/fuzz
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz')
-rw-r--r--fuzz/Makefile.am11
-rw-r--r--fuzz/fuzz_process_packet.c62
2 files changed, 72 insertions, 1 deletions
diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am
index 7858c3371..ade21ac5a 100644
--- a/fuzz/Makefile.am
+++ b/fuzz/Makefile.am
@@ -1,4 +1,4 @@
-bin_PROGRAMS = fuzz_process_packet fuzz_ndpi_reader fuzz_ndpi_reader_with_main
+bin_PROGRAMS = fuzz_process_packet fuzz_process_packet_with_main fuzz_ndpi_reader fuzz_ndpi_reader_with_main
fuzz_process_packet_SOURCES = fuzz_process_packet.c
fuzz_process_packet_CFLAGS =
@@ -13,6 +13,15 @@ fuzz_process_packet_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXX) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(fuzz_process_packet_LDFLAGS) $(LDFLAGS) -o $@
+fuzz_process_packet_with_main_SOURCES = fuzz_process_packet.c
+fuzz_process_packet_with_main_CFLAGS = -DBUILD_MAIN
+fuzz_process_packet_with_main_LDADD = ../src/lib/libndpi.a
+fuzz_process_packet_with_main_LDFLAGS = $(ADDITIONAL_LIBS) $(LIBS)
+# force usage of CXX for linker
+fuzz_process_packet_with_main_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXX) $(AM_CXXFLAGS) $(CXXFLAGS) \
+ $(fuzz_process_packet_with_main_LDFLAGS) $(LDFLAGS) -o $@
+
fuzz_ndpi_reader_SOURCES = fuzz_ndpi_reader.c
fuzz_ndpi_reader_CFLAGS = -I../example/
fuzz_ndpi_reader_LDADD = ../example/libndpiReader.a ../src/lib/libndpi.a
diff --git a/fuzz/fuzz_process_packet.c b/fuzz/fuzz_process_packet.c
index 5af15afba..9efd80799 100644
--- a/fuzz/fuzz_process_packet.c
+++ b/fuzz/fuzz_process_packet.c
@@ -15,6 +15,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ndpi_set_protocol_detection_bitmask2(ndpi_info_mod, &all);
src = ndpi_malloc(SIZEOF_ID_STRUCT);
dst = ndpi_malloc(SIZEOF_ID_STRUCT);
+ ndpi_finalize_initialization(ndpi_info_mod);
}
struct ndpi_flow_struct *ndpi_flow = ndpi_flow_malloc(SIZEOF_FLOW_STRUCT);
@@ -26,3 +27,64 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
return 0;
}
+
+#ifdef BUILD_MAIN
+int main(int argc, char ** argv)
+{
+ FILE * data_file;
+ long data_file_size;
+ uint8_t * data_buffer;
+ int test_retval;
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s: [data-file]\n",
+ (argc > 0 ? argv[0] : "fuzz_process_packet_with_main"));
+ return 1;
+ }
+
+ data_file = fopen(argv[1], "r");
+ if (data_file == NULL) {
+ perror("fopen failed");
+ return 1;
+ }
+
+ if (fseek(data_file, 0, SEEK_END) != 0) {
+ perror("fseek(SEEK_END) failed");
+ fclose(data_file);
+ return 1;
+ }
+
+ data_file_size = ftell(data_file);
+ if (data_file_size < 0) {
+ perror("ftell failed");
+ fclose(data_file);
+ return 1;
+ }
+
+ if (fseek(data_file, 0, SEEK_SET) != 0) {
+ perror("fseek(0, SEEK_SET) failed");
+ fclose(data_file);
+ return 1;
+ }
+
+ data_buffer = malloc(data_file_size);
+ if (data_buffer == NULL) {
+ perror("malloc failed");
+ fclose(data_file);
+ return 1;
+ }
+
+ if (fread(data_buffer, sizeof(*data_buffer), data_file_size, data_file) != (size_t)data_file_size) {
+ perror("fread failed");
+ fclose(data_file);
+ free(data_buffer);
+ return 1;
+ }
+
+ test_retval = LLVMFuzzerTestOneInput(data_buffer, data_file_size);
+ fclose(data_file);
+ free(data_buffer);
+
+ return test_retval;
+}
+#endif