diff options
-rw-r--r-- | fuzz.h | 10 | ||||
-rw-r--r-- | fuzz/fuzz-common.c | 13 |
2 files changed, 17 insertions, 6 deletions
@@ -74,18 +74,24 @@ struct dropbear_fuzz_options { 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 diff --git a/fuzz/fuzz-common.c b/fuzz/fuzz-common.c index f741919..a147710 100644 --- a/fuzz/fuzz-common.c +++ b/fuzz/fuzz-common.c @@ -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 @@ static void load_fixed_client_key(void); // 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 @@ void fuzz_common_setup(void) { 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); } } |