summaryrefslogtreecommitdiff
path: root/fuzz.c
diff options
context:
space:
mode:
authorarnow117 <arnow117@163.com>2019-04-09 05:14:11 +0800
committerarnow117 <arnow117@163.com>2019-04-09 05:14:11 +0800
commitc7566f6a86ec3197dc9fadd099708b9aa950838b (patch)
treedfd5e57434a8e6ebf4da2c397c0233b2b0d2328b /fuzz.c
parent868dccfed95dcbbaf7840683c4e9ca466be7bb9c (diff)
downloadhonggfuzz-c7566f6a86ec3197dc9fadd099708b9aa950838b.tar.gz
add support for external command mutating files which have effective coverage feedback
Diffstat (limited to 'fuzz.c')
-rw-r--r--fuzz.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/fuzz.c b/fuzz.c
index 0e2e8dc0..29e7a99b 100644
--- a/fuzz.c
+++ b/fuzz.c
@@ -314,7 +314,7 @@ static bool fuzz_fetchInput(run_t* run) {
fuzzState_t st = fuzz_getState(run->global);
if (st == _HF_STATE_DYNAMIC_DRY_RUN || st == _HF_STATE_DYNAMIC_SWITCH_TO_MAIN) {
run->mutationsPerRun = 0U;
- if (input_prepareStaticFile(run, /* rewind= */ false)) {
+ if (input_prepareStaticFile(run, /* rewind= */ false, true)) {
return true;
}
fuzz_setDynamicMainState(run);
@@ -328,7 +328,12 @@ static bool fuzz_fetchInput(run_t* run) {
LOG_E("input_prepareFileExternally() failed");
return false;
}
- } else if (!input_prepareDynamicInput(run)) {
+ } else if (run->global->exe.feedbackMutateCommand){
+ if (!input_prepareDynamicInput(run, false)){
+ LOG_E("input_prepareFileDynamically() failed");
+ return false;
+ }
+ } else if (!input_prepareDynamicInput(run, true)) {
LOG_E("input_prepareFileDynamically() failed");
return false;
}
@@ -340,7 +345,12 @@ static bool fuzz_fetchInput(run_t* run) {
LOG_E("input_prepareFileExternally() failed");
return false;
}
- } else if (!input_prepareStaticFile(run, true /* rewind */)) {
+ } else if (run->global->exe.feedbackMutateCommand){
+ if (!input_prepareStaticFile(run, true, false)){
+ LOG_E("input_prepareFileDynamically() failed");
+ return false;
+ }
+ } else if (!input_prepareStaticFile(run, true /* rewind */, true)) {
LOG_E("input_prepareFile() failed");
return false;
}
@@ -351,6 +361,11 @@ static bool fuzz_fetchInput(run_t* run) {
return false;
}
+ if (run->global->exe.feedbackMutateCommand && !input_feedbackMutateFile(run)) {
+ LOG_E("input_feedbackMutateFile() failed");
+ return false;
+ }
+
return true;
}