aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorEli Kobrin <kobrineli@star.intra.ispras.ru>2022-11-17 17:38:45 +0300
committerEli Kobrin <kobrineli@star.intra.ispras.ru>2022-11-17 17:38:45 +0300
commitba788591dc50ba01088a9e0ed76ae29878eedbdd (patch)
tree6e8088e5120b4479d84d45caa4183e8539bf76af /utils
parent8f9726d4a901880808d46706cdb9024c5d08bb7e (diff)
downloadAFLplusplus-ba788591dc50ba01088a9e0ed76ae29878eedbdd.tar.gz
Handle read() error.
Diffstat (limited to 'utils')
-rw-r--r--utils/argv_fuzzing/argv-fuzz-inl.h28
1 files changed, 16 insertions, 12 deletions
diff --git a/utils/argv_fuzzing/argv-fuzz-inl.h b/utils/argv_fuzzing/argv-fuzz-inl.h
index 94d4c123..917c6222 100644
--- a/utils/argv_fuzzing/argv-fuzz-inl.h
+++ b/utils/argv_fuzzing/argv-fuzz-inl.h
@@ -34,7 +34,7 @@
#ifndef _HAVE_ARGV_FUZZ_INL
#define _HAVE_ARGV_FUZZ_INL
-#include <string.h>
+#include <stdlib.h>
#include <unistd.h>
#define AFL_INIT_ARGV() \
@@ -64,24 +64,27 @@ static char **afl_init_argv(int *argc) {
char *ptr = in_buf;
int rc = 0;
- ssize_t num = 0;
- if ((num = read(0, in_buf, MAX_CMDLINE_LEN - 2)) <= 0) {
- *argc = 0;
- return ret;
- }
- if (in_buf[num - 1] == '\n') {
- in_buf[num - 1] = 0;
+ ssize_t num = read(0, in_buf, MAX_CMDLINE_LEN - 2);
+ if (num < 0) {
+ abort();
}
+ in_buf[num] = '\0';
+ in_buf[num + 1] = '\0';
+
+ while (*ptr && rc < MAX_CMDLINE_PAR) {
- char *curarg = strtok(ptr, " ");
- while (curarg && rc < MAX_CMDLINE_PAR) {
- ret[rc] = curarg;
+ ret[rc] = ptr;
if (ret[rc][0] == 0x02 && !ret[rc][1]) ret[rc]++;
rc++;
- curarg = strtok(NULL, " ");
+
+ while (*ptr)
+ ptr++;
+ ptr++;
+
}
*argc = rc;
+
return ret;
}
@@ -90,3 +93,4 @@ static char **afl_init_argv(int *argc) {
#undef MAX_CMDLINE_PAR
#endif /* !_HAVE_ARGV_FUZZ_INL */
+