diff options
author | arnow117 <arnow117@163.com> | 2019-04-09 05:14:11 +0800 |
---|---|---|
committer | arnow117 <arnow117@163.com> | 2019-04-09 05:14:11 +0800 |
commit | c7566f6a86ec3197dc9fadd099708b9aa950838b (patch) | |
tree | dfd5e57434a8e6ebf4da2c397c0233b2b0d2328b /fuzz.c | |
parent | 868dccfed95dcbbaf7840683c4e9ca466be7bb9c (diff) | |
download | honggfuzz-c7566f6a86ec3197dc9fadd099708b9aa950838b.tar.gz |
add support for external command mutating files which have effective coverage feedback
Diffstat (limited to 'fuzz.c')
-rw-r--r-- | fuzz.c | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -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; } |