about summary refs log tree commit diff
path: root/utils/argv_fuzzing/argv-fuzz-inl.h
diff options
context:
space:
mode:
authorEli Kobrin <kobrineli@star.intra.ispras.ru>2022-11-16 18:19:50 +0300
committerEli Kobrin <kobrineli@star.intra.ispras.ru>2022-11-16 18:19:50 +0300
commit903b5607bc0eea01aa9872a2a53221a953c7a559 (patch)
tree681d85377f012b980c2aa149ef049afa28432e24 /utils/argv_fuzzing/argv-fuzz-inl.h
parente5c725c4e0ccfbbff933aab0a3b833d4f21de470 (diff)
downloadafl++-903b5607bc0eea01aa9872a2a53221a953c7a559.tar.gz
Fix argv-fuzz.
Diffstat (limited to 'utils/argv_fuzzing/argv-fuzz-inl.h')
-rw-r--r--utils/argv_fuzzing/argv-fuzz-inl.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/utils/argv_fuzzing/argv-fuzz-inl.h b/utils/argv_fuzzing/argv-fuzz-inl.h
index c15c0271..68a0c93d 100644
--- a/utils/argv_fuzzing/argv-fuzz-inl.h
+++ b/utils/argv_fuzzing/argv-fuzz-inl.h
@@ -34,6 +34,7 @@
 #ifndef _HAVE_ARGV_FUZZ_INL
 #define _HAVE_ARGV_FUZZ_INL
 
+#include <string.h>
 #include <unistd.h>
 
 #define AFL_INIT_ARGV()          \
@@ -63,22 +64,22 @@ static char **afl_init_argv(int *argc) {
   char *ptr = in_buf;
   int   rc = 0;
 
-  if (read(0, in_buf, MAX_CMDLINE_LEN - 2) < 0) {}
-
-  while (*ptr && rc < MAX_CMDLINE_PAR) {
+  ssize_t num = 0;
+  if ((num = read(0, in_buf, MAX_CMDLINE_LEN - 2)) < 0) {}
+  if (in_buf[num - 1] == '\n') {
+      in_buf[num - 1] = 0;
+  }
 
-    ret[rc] = ptr;
+  char delim = ' ';
+  char *curarg = strtok(ptr, &delim);
+  while (curarg && rc < MAX_CMDLINE_PAR) {
+    ret[rc] = curarg;
     if (ret[rc][0] == 0x02 && !ret[rc][1]) ret[rc]++;
     rc++;
-
-    while (*ptr)
-      ptr++;
-    ptr++;
-
+    curarg = strtok(NULL, &delim);
   }
 
   *argc = rc;
-
   return ret;
 
 }
@@ -87,4 +88,3 @@ static char **afl_init_argv(int *argc) {
 #undef MAX_CMDLINE_PAR
 
 #endif                                              /* !_HAVE_ARGV_FUZZ_INL */
-