Mercurial > dropbear
changeset 1768:096a66e45212
Fix fuzzing stderr override on os x
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 26 Oct 2020 23:44:43 +0800 |
parents | 3e1e1f82eba6 |
children | 0e178f767ada |
files | fuzz.h fuzz/fuzz-common.c |
diffstat | 2 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/fuzz.h Mon Oct 26 23:31:24 2020 +0800 +++ b/fuzz.h Mon Oct 26 23:44:43 2020 +0800 @@ -74,18 +74,24 @@ int recv_dumpfd; // avoid filling fuzzing logs, this points to /dev/null - FILE *stderr; + FILE *fake_stderr; }; extern struct dropbear_fuzz_options fuzz; +/* guard for when fuzz.h is included by fuzz-common.c */ +#ifndef FUZZ_NO_REPLACE_STDERR + /* This is a bodge but seems to work. glibc stdio.h has the comment "C89/C99 say they're macros. Make them happy." */ +/* OS X has it as a macro */ #ifdef stderr #undef stderr #endif -#define stderr (fuzz.stderr) +#define stderr (fuzz.fake_stderr) + +#endif /* FUZZ_NO_REPLACE_STDERR */ #endif // DROPBEAR_FUZZ
--- a/fuzz/fuzz-common.c Mon Oct 26 23:31:24 2020 +0800 +++ b/fuzz/fuzz-common.c Mon Oct 26 23:44:43 2020 +0800 @@ -1,7 +1,6 @@ #include "includes.h" #include "includes.h" -#include "fuzz.h" #include "dbutil.h" #include "runopts.h" #include "crypto_desc.h" @@ -11,8 +10,14 @@ #include "atomicio.h" #include "fuzz-wrapfd.h" +#define FUZZ_NO_REPLACE_STDERR +#include "fuzz.h" + /* fuzz.h redefines stderr, we don't want that here */ +#ifdef origstderr #undef stderr +#define stderr origstderr +#endif // origstderr struct dropbear_fuzz_options fuzz; @@ -23,7 +28,7 @@ // This runs automatically before main, due to contructor attribute in fuzz.h void fuzz_early_setup(void) { /* Set stderr to point to normal stderr by default */ - fuzz.stderr = stderr; + fuzz.fake_stderr = stderr; } void fuzz_common_setup(void) { @@ -50,8 +55,8 @@ else { fprintf(stderr, "Dropbear fuzzer: Disabling stderr output\n"); - fuzz.stderr = fopen("/dev/null", "w"); - assert(fuzz.stderr); + fuzz.fake_stderr = fopen("/dev/null", "w"); + assert(fuzz.fake_stderr); } }