aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2021-07-09 11:39:25 +0200
committervanhauser-thc <vh@thc.org>2021-07-09 11:39:25 +0200
commitd354ec2586a3a31c87a8b95433c2886f04c44a03 (patch)
tree1dcd1a1c7460677f8ea7e299126580cad018a0f1 /src
parente1d5009229fb5cea5845cd08e0abdc8fe440ee86 (diff)
downloadafl++-d354ec2586a3a31c87a8b95433c2886f04c44a03.tar.gz
more fixes
Diffstat (limited to 'src')
-rw-r--r--src/afl-fuzz-init.c12
-rw-r--r--src/afl-fuzz-mutators.c39
-rw-r--r--src/afl-fuzz-queue.c38
3 files changed, 49 insertions, 40 deletions
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index 5e4f1585..faa45a4e 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -881,11 +881,7 @@ void perform_dry_run(afl_state_t *afl) {
u32 read_len = MIN(q->len, (u32)MAX_FILE);
use_mem = afl_realloc(AFL_BUF_PARAM(in), read_len);
- if (read(fd, use_mem, read_len) != (ssize_t)read_len) {
-
- FATAL("Short read from '%s'", q->fname);
-
- }
+ ck_read(fd, use_mem, read_len, q->fname);
close(fd);
@@ -1350,6 +1346,12 @@ void pivot_inputs(afl_state_t *afl) {
if (q->passed_det) { mark_as_det_done(afl, q); }
+ if (afl->custom_mutators_count) {
+
+ run_afl_custom_queue_new_entry(afl, q, q->fname, NULL);
+
+ }
+
++id;
}
diff --git a/src/afl-fuzz-mutators.c b/src/afl-fuzz-mutators.c
index e27d6fae..91bae48e 100644
--- a/src/afl-fuzz-mutators.c
+++ b/src/afl-fuzz-mutators.c
@@ -31,6 +31,45 @@ struct custom_mutator *load_custom_mutator(afl_state_t *, const char *);
struct custom_mutator *load_custom_mutator_py(afl_state_t *, char *);
#endif
+void run_afl_custom_queue_new_entry(afl_state_t *afl, struct queue_entry *q,
+ u8 *fname, u8 *mother_fname) {
+
+ if (afl->custom_mutators_count) {
+
+ u8 updated = 0;
+
+ LIST_FOREACH(&afl->custom_mutator_list, struct custom_mutator, {
+
+ if (el->afl_custom_queue_new_entry) {
+
+ if (el->afl_custom_queue_new_entry(el->data, fname, mother_fname)) {
+
+ updated = 1;
+
+ }
+
+ }
+
+ });
+
+ if (updated) {
+
+ struct stat st;
+ if (stat(fname, &st)) { PFATAL("File %s is gone!", fname); }
+ if (!st.st_size) {
+
+ FATAL("File %s became empty in custom mutator!", fname);
+
+ }
+
+ q->len = st.st_size;
+
+ }
+
+ }
+
+}
+
void setup_custom_mutators(afl_state_t *afl) {
/* Try mutator library first */
diff --git a/src/afl-fuzz-queue.c b/src/afl-fuzz-queue.c
index 48794e95..8080775f 100644
--- a/src/afl-fuzz-queue.c
+++ b/src/afl-fuzz-queue.c
@@ -474,42 +474,10 @@ void add_to_queue(afl_state_t *afl, u8 *fname, u32 len, u8 passed_det) {
if (afl->custom_mutators_count) {
- u8 updated = 0;
+ /* At the initialization stage, queue_cur is NULL */
+ if (afl->queue_cur && !afl->syncing_party) {
- LIST_FOREACH(&afl->custom_mutator_list, struct custom_mutator, {
-
- if (el->afl_custom_queue_new_entry) {
-
- u8 *fname_orig = NULL;
-
- /* At the initialization stage, queue_cur is NULL */
- if (afl->queue_cur && !afl->syncing_party) {
-
- fname_orig = afl->queue_cur->fname;
-
- }
-
- if (el->afl_custom_queue_new_entry(el->data, fname, fname_orig)) {
-
- updated = 1;
-
- }
-
- }
-
- });
-
- if (updated) {
-
- struct stat st;
- if (stat(fname, &st)) { PFATAL("File %s is gone!", fname); }
- if (!st.st_size) {
-
- FATAL("File %s became empty in custom mutator!", fname);
-
- }
-
- q->len = st.st_size;
+ run_afl_custom_queue_new_entry(afl, q, fname, afl->queue_cur->fname);
}