diff --git a/src/net_processing.h b/src/net_processing.h --- a/src/net_processing.h +++ b/src/net_processing.h @@ -128,4 +128,9 @@ /** Relay transaction to every node */ void RelayTransaction(const TxId &txid, const CConnman &connman); +bool ProcessMessage(const Config &config, CNode *pfrom, + const std::string &strCommand, CDataStream &vRecv, + int64_t nTimeReceived, CConnman *connman, BanMan *banman, + const std::atomic &interruptMsgProc); + #endif // BITCOIN_NET_PROCESSING_H diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2230,11 +2230,10 @@ } } -static bool ProcessMessage(const Config &config, CNode *pfrom, - const std::string &strCommand, CDataStream &vRecv, - int64_t nTimeReceived, CConnman *connman, - BanMan *banman, - const std::atomic &interruptMsgProc) { +bool ProcessMessage(const Config &config, CNode *pfrom, + const std::string &strCommand, CDataStream &vRecv, + int64_t nTimeReceived, CConnman *connman, BanMan *banman, + const std::atomic &interruptMsgProc) { const CChainParams &chainparams = config.GetChainParams(); LogPrint(BCLog::NET, "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->GetId()); diff --git a/src/test/fuzz/CMakeLists.txt b/src/test/fuzz/CMakeLists.txt --- a/src/test/fuzz/CMakeLists.txt +++ b/src/test/fuzz/CMakeLists.txt @@ -44,6 +44,21 @@ endforeach() endfunction() +function(add_process_message_fuzz_targets) + foreach(_fuzz_test_name ${ARGN}) + sanitize_target_name("fuzz-process_message_" ${_fuzz_test_name} _fuzz_target_name) + add_fuzz_target( + ${_fuzz_target_name} + process_message_${_fuzz_test_name} + + # Sources + process_message.cpp + ) + + target_compile_definitions(${_fuzz_target_name} PRIVATE MESSAGE_TYPE=${_fuzz_test_name}) + endforeach() +endfunction() + add_regular_fuzz_targets( addrdb bloom_filter @@ -53,6 +68,7 @@ eval_script net_permissions parse_iso8601 + process_message psbt script script_flags @@ -101,3 +117,30 @@ txoutcompressor_deserialize txundo_deserialize ) + +add_process_message_fuzz_targets( + addr + block + blocktxn + cmpctblock + feefilter + filteradd + filterclear + filterload + getaddr + getblocks + getblocktxn + getdata + getheaders + headers + inv + mempool + notfound + ping + pong + sendcmpct + sendheaders + tx + verack + version +) diff --git a/src/test/fuzz/process_message.cpp b/src/test/fuzz/process_message.cpp new file mode 100644 --- /dev/null +++ b/src/test/fuzz/process_message.cpp @@ -0,0 +1,129 @@ +// Copyright (c) 2020 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include +#include +#include