[libFuzzer] Add dummy call of LLVMFuzzerTestOneInput to afl_driver.
Summary:
Add dummy call of LLVMFuzzerTestOneInput to afl_driver before it starts
executing on actual inputs. Do this so that first time initialization
performed by LLVMFuzzerTestOneInput is not considered code covered by
a particular input.
Patch By: metzman
Reviewers: kcc, morehouse
Reviewed By: kcc
Subscribers: llvm-commits, Sanitizers
Differential Revision: https://reviews.llvm.org/D41193
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/fuzzer@320643 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/afl/afl_driver.cpp b/afl/afl_driver.cpp
index f102479..bbe5be7 100644
--- a/afl/afl_driver.cpp
+++ b/afl/afl_driver.cpp
@@ -88,7 +88,7 @@
// to the file as well, if the error occurs after the duplication is performed.
#define CHECK_ERROR(cond, error_message) \
if (!(cond)) { \
- fprintf(stderr, (error_message)); \
+ fprintf(stderr, "%s\n", (error_message)); \
abort(); \
}
@@ -308,6 +308,12 @@
return ExecuteFilesOnyByOne(argc, argv);
assert(N > 0);
+
+ // Call LLVMFuzzerTestOneInput here so that coverage caused by initialization
+ // on the first execution of LLVMFuzzerTestOneInput is ignored.
+ uint8_t dummy_input[1] = {0};
+ LLVMFuzzerTestOneInput(dummy_input, 1);
+
time_t unit_time_secs;
int num_runs = 0;
while (__afl_persistent_loop(N)) {