aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2020-08-05 12:54:52 +0200
committerAndrea Fioraldi <andreafioraldi@gmail.com>2020-08-05 12:54:52 +0200
commit2d650f8c2262f99e01950d39c45f242f2e7dfbc9 (patch)
treef4ff3ba7fb5efb862d90585e212ac82ed2d861ca /src
parent19631851f6c7ecac42fb76ff70314f4e0777d3f3 (diff)
parentf30ca1476c2d4d08d46fe9657ad4aa1d828eb578 (diff)
downloadafl++-2d650f8c2262f99e01950d39c45f242f2e7dfbc9.tar.gz
merge conflict
Diffstat (limited to 'src')
-rw-r--r--src/afl-fuzz-queue.c2
-rw-r--r--src/afl-fuzz-run.c17
2 files changed, 16 insertions, 3 deletions
diff --git a/src/afl-fuzz-queue.c b/src/afl-fuzz-queue.c
index 71874283..f35df914 100644
--- a/src/afl-fuzz-queue.c
+++ b/src/afl-fuzz-queue.c
@@ -112,8 +112,10 @@ static u8 check_if_text(struct queue_entry *q) {
u8 buf[MAX_FILE];
s32 fd, len = q->len, offset = 0, ascii = 0, utf8 = 0, comp;
+ if (len >= MAX_FILE) len = MAX_FILE - 1;
if ((fd = open(q->fname, O_RDONLY)) < 0) return 0;
if ((comp = read(fd, buf, len)) != len) return 0;
+ buf[len] = 0;
close(fd);
while (offset < len) {
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);