diff options
author | van Hauser <vh@thc.org> | 2020-08-05 11:17:15 +0200 |
---|---|---|
committer | van Hauser <vh@thc.org> | 2020-08-05 11:17:15 +0200 |
commit | f30ca1476c2d4d08d46fe9657ad4aa1d828eb578 (patch) | |
tree | c625c30a3e5db9918b8242ddcb7dff2c817832d2 /src/afl-fuzz-run.c | |
parent | 0712d44cbcf1153972cd5457508dec5387e5b72e (diff) | |
download | afl++-f30ca1476c2d4d08d46fe9657ad4aa1d828eb578.tar.gz |
fix short write
Diffstat (limited to 'src/afl-fuzz-run.c')
-rw-r--r-- | src/afl-fuzz-run.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/afl-fuzz-run.c b/src/afl-fuzz-run.c index 44d3c522..ed4a1081 100644 --- a/src/afl-fuzz-run.c +++ b/src/afl-fuzz-run.c @@ -819,16 +819,27 @@ u8 trim_case(afl_state_t *afl, struct queue_entry *q, u8 *in_buf) { fd = open(q->fname, O_WRONLY | O_CREAT | O_TRUNC, 0600); + if (fd < 0) { PFATAL("Unable to create '%s'", q->fname); } + + u32 written = 0; + while (written < q->len) { + + ssize_t result = write(fd, in_buf, q->len - written); + if (result > 0) written += result; + + } + } else { unlink(q->fname); /* ignore errors */ fd = open(q->fname, O_WRONLY | O_CREAT | O_EXCL, 0600); - } + if (fd < 0) { PFATAL("Unable to create '%s'", q->fname); } - if (fd < 0) { PFATAL("Unable to create '%s'", q->fname); } + ck_write(fd, in_buf, q->len, q->fname); + + } - ck_write(fd, in_buf, q->len, q->fname); close(fd); memcpy(afl->fsrv.trace_bits, afl->clean_trace, afl->fsrv.map_size); |