# HG changeset patch # User Matt Johnston # Date 1603727083 -28800 # Node ID 096a66e452120b6b1f3c02653cd7a97fdb2fddcf # Parent 3e1e1f82eba60edc8ce37dc76b696592c4e67cc1 Fix fuzzing stderr override on os x diff -r 3e1e1f82eba6 -r 096a66e45212 fuzz.h --- 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 diff -r 3e1e1f82eba6 -r 096a66e45212 fuzz/fuzz-common.c --- 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); } }