From: Philippe Antoine Date: Mon, 16 Nov 2020 09:14:46 +0000 (+0100) Subject: fuzz: driver running directories as well as single files X-Git-Tag: suricata-7.0.0-beta1~1813 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5d24a9a571c29118f3b36876ade93ce9bbe7124;p=thirdparty%2Fsuricata.git fuzz: driver running directories as well as single files --- diff --git a/src/tests/fuzz/onefile.c b/src/tests/fuzz/onefile.c index ef86d921af..f59a12c326 100644 --- a/src/tests/fuzz/onefile.c +++ b/src/tests/fuzz/onefile.c @@ -1,25 +1,19 @@ +#define _DEFAULT_SOURCE 1 // for DT_REG #include #include #include +#include +#include #include "autoconf.h" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); -int main(int argc, char** argv) +static int runOneFile(const char *fname) { - FILE * fp; + // opens the file, get its size, and reads it into a buffer uint8_t *data; size_t size; - - if (argc != 2) { - return 1; - } -#ifdef AFLFUZZ_PERSISTANT_MODE - while (__AFL_LOOP(1000)) { -#endif /* AFLFUZZ_PERSISTANT_MODE */ - - //opens the file, get its size, and reads it into a buffer - fp = fopen(argv[1], "rb"); + FILE *fp = fopen(fname, "rb"); if (fp == NULL) { return 2; } @@ -51,10 +45,50 @@ int main(int argc, char** argv) LLVMFuzzerTestOneInput(data, size); free(data); fclose(fp); + return 0; +} + +int main(int argc, char **argv) +{ + DIR *d; + struct dirent *dir; + int r; + + if (argc != 2) { + return 1; + } +#ifdef AFLFUZZ_PERSISTANT_MODE + while (__AFL_LOOP(1000)) { +#endif /* AFLFUZZ_PERSISTANT_MODE */ + + d = opendir(argv[1]); + if (d == NULL) { + // run one file + r = runOneFile(argv[1]); + if (r != 0) { + return r; + } + } else { + // run every file in one directory + if (chdir(argv[1]) != 0) { + closedir(d); + printf("Invalid directory\n"); + return 2; + } + while ((dir = readdir(d)) != NULL) { + if (dir->d_type != DT_REG) { + continue; + } + r = runOneFile(dir->d_name); + if (r != 0) { + return r; + } + } + closedir(d); + } #ifdef AFLFUZZ_PERSISTANT_MODE } #endif /* AFLFUZZ_PERSISTANT_MODE */ return 0; } -