add fuzzer entry point
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt index 0365376..756a270 100644 --- a/regress/CMakeLists.txt +++ b/regress/CMakeLists.txt
@@ -205,11 +205,5 @@ ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND}) -IF(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT (CLANG_VERSION_MAJOR LESS 6) ) - ENABLE_LANGUAGE(CXX) - ADD_EXECUTABLE(fuzz_target zip_read_fuzzer.cc) - TARGET_COMPILE_OPTIONS(fuzz_target PRIVATE -g -O1 -fsanitize=fuzzer) - TARGET_LINK_LIBRARIES(fuzz_target PUBLIC zip PRIVATE -fsanitize=fuzzer) -ELSE() - message(AUTHOR_WARNING "Can't build fuzz target with this compiler") -ENDIF() \ No newline at end of file +ADD_EXECUTABLE(fuzz_main fuzz_main.c) +TARGET_LINK_LIBRARIES(fuzz_main zip) \ No newline at end of file
diff --git a/regress/fuzz_main.c b/regress/fuzz_main.c new file mode 100644 index 0000000..694322e --- /dev/null +++ b/regress/fuzz_main.c
@@ -0,0 +1,52 @@ +#include "zip_read_fuzzer.cc" +#include <stdio.h> +#include <stdlib.h> + +/* fuzz target entry point, works without libFuzzer */ + +int main(int argc, char **argv) +{ + FILE *f; + char *buf = NULL; + long siz_buf; + + if(argc < 2) + { + fprintf(stderr, "no input file\n"); + goto err; + } + + f = fopen(argv[1], "rb"); + if(f == NULL) + { + fprintf(stderr, "error opening input file %s\n", argv[1]); + goto err; + } + + fseek(f, 0, SEEK_END); + + siz_buf = ftell(f); + rewind(f); + + if(siz_buf < 1) goto err; + + buf = (char*)malloc(siz_buf); + if(buf == NULL) + { + fprintf(stderr, "malloc() failed\n"); + goto err; + } + + if(fread(buf, siz_buf, 1, f) != 1) + { + fprintf(stderr, "fread() failed\n"); + goto err; + } + + (void)LLVMFuzzerTestOneInput((uint8_t*)buf, siz_buf); + +err: + free(buf); + + return 0; +}