about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMartin Nyhus <martin@nyhus.dev>2024-02-28 22:29:55 +0100
committerMartin Nyhus <martin@nyhus.dev>2024-02-28 22:29:55 +0100
commit335b2d4542d951b6742ca02646ab1c254f64f8f2 (patch)
tree8bc7096897ee18db6429bdecc31ad5200d9b838f /src
parent603136efa032d62eec14720a7435ce0a6d143bb6 (diff)
downloadafl++-335b2d4542d951b6742ca02646ab1c254f64f8f2.tar.gz
Load autodictionary when using new forkserver
Fixes a bug where the new fork server would decrement dict_size until
zero then try to use it as the upper bound for the number of bytes to
pass to add_extra_func, causing it to never store any of the tokens.
Diffstat (limited to 'src')
-rw-r--r--src/afl-forkserver.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 1381236c..d9207d45 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -1152,12 +1152,11 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
 
         }
 
-        while (dict_size != 0) {
+        while (offset < dict_size) {
 
-          rlen = read(fsrv->fsrv_st_fd, dict + offset, dict_size);
+          rlen = read(fsrv->fsrv_st_fd, dict + offset, dict_size - offset);
           if (rlen > 0) {
 
-            dict_size -= rlen;
             offset += rlen;
 
           } else {
@@ -1165,7 +1164,7 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
             FATAL(
                 "Reading autodictionary fail at position %u with %u bytes "
                 "left.",
-                offset, dict_size);
+                offset, dict_size - offset);
 
           }