diff options
Diffstat (limited to 'src/afl-fuzz.c')
-rw-r--r-- | src/afl-fuzz.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c index 54fdcc25..7df82b12 100644 --- a/src/afl-fuzz.c +++ b/src/afl-fuzz.c @@ -714,21 +714,24 @@ int main(int argc, char** argv) { if (qemu_mode) { - char* qemu_preload = getenv("QEMU_SET_ENV"); - char buf[4096]; - - if (qemu_preload) { - - snprintf(buf, sizeof(buf), "%s,LD_PRELOAD=%s", qemu_preload, - getenv("AFL_PRELOAD")); - - } else { - - snprintf(buf, sizeof(buf), "LD_PRELOAD=%s", getenv("AFL_PRELOAD")); - + u8* qemu_preload = getenv("QEMU_SET_ENV"); + u8* afl_preload = getenv("AFL_PRELOAD"); + u8* buf; + + s32 i, afl_preload_size = strlen(afl_preload); + for (i = 0; i < afl_preload_size; ++i) { + if (afl_preload[i] == ',') + PFATAL("Comma (',') is not allowed in AFL_PRELOAD when -Q is specified!"); } + if (qemu_preload) + buf = alloc_printf("%s,LD_PRELOAD=%s", qemu_preload, afl_preload); + else + buf = alloc_printf("LD_PRELOAD=%s", afl_preload); + setenv("QEMU_SET_ENV", buf, 1); + + ck_free(buf); } else { |