aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaik Betka <9078425+voidptr127@users.noreply.github.com>2023-04-21 16:46:15 +0200
committerMaik Betka <9078425+voidptr127@users.noreply.github.com>2023-04-21 16:46:15 +0200
commit779a72ef8c2457430b824f7830eba731745fb6ee (patch)
tree64bcf9c170649d9c487e3ff41be6244e5907ae7e /src
parent7101ffa1ae79e15d70905b09decbe69cdf53367b (diff)
downloadafl++-779a72ef8c2457430b824f7830eba731745fb6ee.tar.gz
fixed AFL_POST_PROCESS_KEEP_ORIGINAL for version 4.07a
Diffstat (limited to 'src')
-rw-r--r--src/afl-fuzz-run.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/afl-fuzz-run.c b/src/afl-fuzz-run.c
index 2d53de93..ac4fb4a9 100644
--- a/src/afl-fuzz-run.c
+++ b/src/afl-fuzz-run.c
@@ -133,14 +133,22 @@ write_to_testcase(afl_state_t *afl, void **mem, u32 len, u32 fix) {
}
- if (new_mem != *mem && new_mem != NULL && new_size > 0
- && !afl->afl_env.afl_post_process_keep_original) {
+ if (new_mem != *mem && new_mem != NULL && new_size > 0) {
- u8 *new_buf = afl_realloc(AFL_BUF_PARAM(out_scratch), new_size);
- if (unlikely(!new_buf)) { PFATAL("alloc"); }
- *mem = new_buf;
- memcpy(*mem, new_mem, new_size);
- afl_swap_bufs(AFL_BUF_PARAM(out), AFL_BUF_PARAM(out_scratch));
+ new_buf = afl_realloc(AFL_BUF_PARAM(out_scratch), new_size);
+ if (unlikely(!new_buf)) { PFATAL("alloc"); }
+ memcpy(new_buf, new_mem, new_size);
+
+ /* if AFL_POST_PROCESS_KEEP_ORIGINAL is set then save the original memory
+ prior post-processing in new_mem to restore it later */
+ if (unlikely(afl->afl_env.afl_post_process_keep_original)) {
+
+ new_mem = *mem;
+
+ }
+
+ *mem = new_buf;
+ afl_swap_bufs(AFL_BUF_PARAM(out), AFL_BUF_PARAM(out_scratch));
}
@@ -162,17 +170,19 @@ write_to_testcase(afl_state_t *afl, void **mem, u32 len, u32 fix) {
if (likely(!sent)) {
/* everything as planned. use the potentially new data. */
+ afl_fsrv_write_to_testcase(&afl->fsrv, *mem, new_size);
if (likely(!afl->afl_env.afl_post_process_keep_original)) {
- afl_fsrv_write_to_testcase(&afl->fsrv, *mem, new_size);
+ len = new_size;
} else {
- afl_fsrv_write_to_testcase(&afl->fsrv, new_mem, new_size);
+ /* restore the original memory which was saved in new_mem */
+ *mem = new_mem;
+ afl_swap_bufs(AFL_BUF_PARAM(out), AFL_BUF_PARAM(out_scratch));
}
- len = new_size;
}