diff options
author | Matt Johnston <matt@ucc.asn.au> | 2020-10-23 23:10:20 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2020-10-23 23:10:20 +0800 |
commit | f37def57b089a884df51072cb24e830701ecbeaa (patch) | |
tree | 12017ee2c70c8a0c1dfe98c59029e0015a7463a0 /fuzz/fuzz-harness.c | |
parent | 1a208c460b412113704c4d5f98585017ee0a6ccf (diff) |
Move fuzzing code to fuzz/ subdirectory, improve Makefile.in
Diffstat (limited to 'fuzz/fuzz-harness.c')
-rw-r--r-- | fuzz/fuzz-harness.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/fuzz/fuzz-harness.c b/fuzz/fuzz-harness.c new file mode 100644 index 0000000..ced707c --- /dev/null +++ b/fuzz/fuzz-harness.c @@ -0,0 +1,48 @@ +#include "includes.h" +#include "buffer.h" +#include "dbutil.h" + +extern int LLVMFuzzerTestOneInput(const unsigned char *data, size_t size); + +int main(int argc, char ** argv) { + int i; + buffer *input = buf_new(100000); + + for (i = 1; i < argc; i++) { +#if DEBUG_TRACE + if (strcmp(argv[i], "-v") == 0) { + debug_trace = 1; + TRACE(("debug printing on")) + } +#endif + } + + int old_fuzz_wrapfds = 0; + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + /* ignore arguments */ + continue; + } + + char* fn = argv[i]; + buf_setlen(input, 0); + buf_readfile(input, fn); + buf_setpos(input, 0); + + /* Run twice to catch problems with statefulness */ + fuzz.wrapfds = old_fuzz_wrapfds; + printf("Running %s once \n", fn); + LLVMFuzzerTestOneInput(input->data, input->len); + printf("Running %s twice \n", fn); + LLVMFuzzerTestOneInput(input->data, input->len); + printf("Done %s\n", fn); + + /* Disable wrapfd so it won't interfere with buf_readfile() above */ + old_fuzz_wrapfds = fuzz.wrapfds; + fuzz.wrapfds = 0; + } + + printf("Finished\n"); + + return 0; +} |