aboutsummaryrefslogtreecommitdiff
path: root/src/afl-common.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2021-04-20 11:38:09 +0200
committerGitHub <noreply@github.com>2021-04-20 11:38:09 +0200
commit48cef3c74727407f82c44800d382737265fe65b4 (patch)
tree07338ec82703c20cc1f78a235ac3ad16e2465bf1 /src/afl-common.c
parentf7179e44f6c46fef318b6413d9c00693c1af4602 (diff)
parent3b5fa3632b0e482b2915709d7fbec827e1d997b9 (diff)
downloadafl++-48cef3c74727407f82c44800d382737265fe65b4.tar.gz
Merge pull request #871 from AFLplusplus/dev
push to stable
Diffstat (limited to 'src/afl-common.c')
-rw-r--r--src/afl-common.c63
1 files changed, 41 insertions, 22 deletions
diff --git a/src/afl-common.c b/src/afl-common.c
index 37b4788c..0fb1462e 100644
--- a/src/afl-common.c
+++ b/src/afl-common.c
@@ -70,31 +70,26 @@ void detect_file_args(char **argv, u8 *prog_in, bool *use_stdin) {
*use_stdin = false;
- if (prog_in[0] != 0) { // not afl-showmap special case
+ /* Be sure that we're always using fully-qualified paths. */
- u8 *n_arg;
+ *aa_loc = 0;
- /* Be sure that we're always using fully-qualified paths. */
+ /* Construct a replacement argv value. */
+ u8 *n_arg;
- *aa_loc = 0;
+ if (prog_in[0] == '/') {
- /* Construct a replacement argv value. */
+ n_arg = alloc_printf("%s%s%s", argv[i], prog_in, aa_loc + 2);
- if (prog_in[0] == '/') {
-
- n_arg = alloc_printf("%s%s%s", argv[i], prog_in, aa_loc + 2);
-
- } else {
-
- n_arg = alloc_printf("%s%s/%s%s", argv[i], cwd, prog_in, aa_loc + 2);
-
- }
+ } else {
- ck_free(argv[i]);
- argv[i] = n_arg;
+ n_arg = alloc_printf("%s%s/%s%s", argv[i], cwd, prog_in, aa_loc + 2);
}
+ ck_free(argv[i]);
+ argv[i] = n_arg;
+
}
i++;
@@ -287,12 +282,19 @@ u8 *find_binary(u8 *fname) {
u8 *find_afl_binary(u8 *own_loc, u8 *fname) {
- u8 *afl_path = NULL, *target_path, *own_copy;
+ u8 *afl_path = NULL, *target_path, *own_copy, *tmp;
+ int perm = X_OK;
+
+ if ((tmp = strrchr(fname, '.'))) {
+
+ if (!strcasecmp(tmp, ".so") || !strcasecmp(tmp, ".dylib")) { perm = R_OK; }
+
+ }
if ((afl_path = getenv("AFL_PATH"))) {
target_path = alloc_printf("%s/%s", afl_path, fname);
- if (!access(target_path, X_OK)) {
+ if (!access(target_path, perm)) {
return target_path;
@@ -316,7 +318,7 @@ u8 *find_afl_binary(u8 *own_loc, u8 *fname) {
target_path = alloc_printf("%s/%s", own_copy, fname);
ck_free(own_copy);
- if (!access(target_path, X_OK)) {
+ if (!access(target_path, perm)) {
return target_path;
@@ -334,8 +336,17 @@ u8 *find_afl_binary(u8 *own_loc, u8 *fname) {
}
- target_path = alloc_printf("%s/%s", BIN_PATH, fname);
- if (!access(target_path, X_OK)) {
+ if (perm == X_OK) {
+
+ target_path = alloc_printf("%s/%s", BIN_PATH, fname);
+
+ } else {
+
+ target_path = alloc_printf("%s/%s", AFL_PATH, fname);
+
+ }
+
+ if (!access(target_path, perm)) {
return target_path;
@@ -345,7 +356,15 @@ u8 *find_afl_binary(u8 *own_loc, u8 *fname) {
}
- return find_binary(fname);
+ if (perm == X_OK) {
+
+ return find_binary(fname);
+
+ } else {
+
+ FATAL("Library '%s' not found", fname);
+
+ }
}