diff options
author | hexcoder- <heiko@hexco.de> | 2019-07-13 08:09:19 +0200 |
---|---|---|
committer | Hexcoder <heiko@hexco.de> | 2019-07-13 09:39:51 +0200 |
commit | f45332e1ab1f7b82c38c6fcc3c451fca35d5a9ce (patch) | |
tree | 1cb23f960ccb9e4881e5e0979a78bb3c4f803262 /afl-tmin.c | |
parent | d9c70c7b8cdcde0827e167c61f60f862bc9a3ba8 (diff) | |
download | afl++-f45332e1ab1f7b82c38c6fcc3c451fca35d5a9ce.tar.gz |
portability fix: getcwd(NULL, 0) is a non-POSIX glibc extension. Refactor
detect_file_args() in a separate file in order to avoid multiple copies.
Diffstat (limited to 'afl-tmin.c')
-rw-r--r-- | afl-tmin.c | 45 |
1 files changed, 2 insertions, 43 deletions
diff --git a/afl-tmin.c b/afl-tmin.c index b9dbb2b5..d6fd27fc 100644 --- a/afl-tmin.c +++ b/afl-tmin.c @@ -27,6 +27,7 @@ #include "alloc-inl.h" #include "hash.h" #include "sharedmem.h" +#include "afl-common.h" #include <stdio.h> #include <unistd.h> @@ -881,48 +882,6 @@ static void setup_signal_handlers(void) { } -/* Detect @@ in args. */ - -static void detect_file_args(char** argv) { - - u32 i = 0; - u8* cwd = getcwd(NULL, 0); - - if (!cwd) PFATAL("getcwd() failed"); - - while (argv[i]) { - - u8* aa_loc = strstr(argv[i], "@@"); - - if (aa_loc) { - - u8 *aa_subst, *n_arg; - - /* Be sure that we're always using fully-qualified paths. */ - - if (prog_in[0] == '/') aa_subst = prog_in; - else aa_subst = alloc_printf("%s/%s", cwd, prog_in); - - /* Construct a replacement argv value. */ - - *aa_loc = 0; - n_arg = alloc_printf("%s%s%s", argv[i], aa_subst, aa_loc + 2); - argv[i] = n_arg; - *aa_loc = '@'; - - if (prog_in[0] != '/') ck_free(aa_subst); - - } - - i++; - - } - - free(cwd); /* not tracked */ - -} - - /* Display usage hints. */ static void usage(u8* argv0) { @@ -1222,7 +1181,7 @@ int main(int argc, char** argv) { set_up_environment(); find_binary(argv[optind]); - detect_file_args(argv + optind); + detect_file_args(argv + optind, prog_in); if (qemu_mode) use_argv = get_qemu_argv(argv[0], argv + optind, argc - optind); |