From 7e8b18e48089f6dd32692230495f7146779bf60d Mon Sep 17 00:00:00 2001 From: zebambam Date: Tue, 15 Oct 2019 00:00:21 +0000 Subject: [PATCH] Added basic fuzzing to the monolith, see ticket #4155 --- src/bitcoind.cpp | 6 +++++- src/fuzz.cpp | 18 ++++++++++++++++++ src/fuzz.h | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/fuzz.cpp create mode 100644 src/fuzz.h diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 7790a6ce9..391772652 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -186,7 +186,10 @@ bool AppInit(int argc, char* argv[]) return fRet; } - +#include "fuzz.h" +#ifdef ZCASH_FUZZ +#include "fuzz.cpp" +#else int main(int argc, char* argv[]) { SetupEnvironment(); @@ -196,3 +199,4 @@ int main(int argc, char* argv[]) return (AppInit(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE); } +#endif diff --git a/src/fuzz.cpp b/src/fuzz.cpp new file mode 100644 index 000000000..4c68bfab3 --- /dev/null +++ b/src/fuzz.cpp @@ -0,0 +1,18 @@ +extern bool DecodeHexTx(CTransaction& tx, const std::string& strHexTx); + +bool fuzz_DecodeHexTxFunction (const std::string& strHexTx) { + CTransaction tx; + return DecodeHexTx(tx, strHexTx); +} + + +int fuzz_DecodeHexTx (int argc, char *argv[]) { + std::ifstream t(argv[1]); + std::string str((std::istreambuf_iterator(t)), + std::istreambuf_iterator()); + if (fuzz_DecodeHexTxFunction (str)) { fprintf(stdout, "Decoded hex string") ; return 0; } + else { fprintf(stderr, "Could not decode hex string") ; return -1; } +} + +int main (int argc, char *argv[]) { return ZCASH_FUZZER_MAIN(argc, argv); } +#warning BUILDING A FUZZER, NOT THE REAL MAIN diff --git a/src/fuzz.h b/src/fuzz.h new file mode 100644 index 000000000..1199e5891 --- /dev/null +++ b/src/fuzz.h @@ -0,0 +1,2 @@ +//#define ZCASH_FUZZ +#define ZCASH_FUZZER_MAIN fuzz_DecodeHexTx