about summary refs log tree commit diff
path: root/src/afl-fuzz-mutators.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-07-21 13:17:29 +0200
committerGitHub <noreply@github.com>2020-07-21 13:17:29 +0200
commit9a33a29b4a87ec9f211f83fa83f499e1ed8c256d (patch)
tree2c0d6c7c128fbadd145b5df91c917a75483f3be6 /src/afl-fuzz-mutators.c
parentb6e65f98827470745d7df5cf1e38b506b9e839b0 (diff)
parent6c163910eec79058bdaf3a358e75d579da1f9112 (diff)
downloadafl++-9a33a29b4a87ec9f211f83fa83f499e1ed8c256d.tar.gz
Merge pull request #462 from AFLplusplus/dev
Dev
Diffstat (limited to 'src/afl-fuzz-mutators.c')
-rw-r--r--src/afl-fuzz-mutators.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/afl-fuzz-mutators.c b/src/afl-fuzz-mutators.c
index 9fc77ffe..0fb34ab7 100644
--- a/src/afl-fuzz-mutators.c
+++ b/src/afl-fuzz-mutators.c
@@ -286,6 +286,15 @@ u8 trim_case_custom(afl_state_t *afl, struct queue_entry *q, u8 *in_buf,
           "Trimmed data returned by custom mutator is larger than original "
           "data");
 
+    } else if (unlikely(retlen == 0)) {
+
+      /* Do not run the empty test case on the target. To keep the custom
+         trimming function running, we simply treat the empty test case as an
+         unsuccessful trimming and skip it, instead of aborting the trimming. */
+
+      ++afl->trim_execs;
+      goto unsuccessful_trimming;
+
     }
 
     write_to_testcase(afl, retbuf, retlen);
@@ -325,6 +334,8 @@ u8 trim_case_custom(afl_state_t *afl, struct queue_entry *q, u8 *in_buf,
 
     } else {
 
+    unsuccessful_trimming:
+
       /* Tell the custom mutator that the trimming was unsuccessful */
       afl->stage_cur = mutator->afl_custom_post_trim(mutator->data, 0);
       if (unlikely(afl->stage_cur < 0)) {