diff --git a/tests/fuzz_main.c b/tests/fuzz_main.c new file mode 100644 index 0000000..40c0cc8 --- /dev/null +++ b/tests/fuzz_main.c @@ -0,0 +1,54 @@ +#include +#include +#include + +/* fuzz target entry point, works without libFuzzer */ + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); + +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((size_t)siz_buf); + if(buf == NULL) + { + fprintf(stderr, "malloc() failed\n"); + goto err; + } + + if(fread(buf, (size_t)siz_buf, 1, f) != 1) + { + fprintf(stderr, "fread() failed\n"); + goto err; + } + + (void)LLVMFuzzerTestOneInput((uint8_t*)buf, (size_t)siz_buf); + +err: + free(buf); + + return 0; +} diff --git a/tests/stb_png_read_fuzzer.cpp b/tests/stb_png_read_fuzzer.c similarity index 84% rename from tests/stb_png_read_fuzzer.cpp rename to tests/stb_png_read_fuzzer.c index 0e14e1b..97c9083 100644 --- a/tests/stb_png_read_fuzzer.cpp +++ b/tests/stb_png_read_fuzzer.c @@ -2,7 +2,7 @@ #define STBI_ONLY_PNG #include "../stb_image.h" -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { int x, y, channels;