| 65 | } |
| 66 | |
| 67 | void fuzz_target(FuzzBufferType buffer, const std::string& LIMIT_TO_MESSAGE_TYPE) |
| 68 | { |
| 69 | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); |
| 70 | |
| 71 | ConnmanTestMsg& connman = *static_cast<ConnmanTestMsg*>(g_setup->m_node.connman.get()); |
| 72 | TestChainState& chainstate = *static_cast<TestChainState*>(&g_setup->m_node.chainman->ActiveChainstate()); |
| 73 | SetMockTime(1610000000); // any time to successfully reset ibd |
| 74 | chainstate.ResetIbd(); |
| 75 | |
| 76 | const std::string random_message_type{fuzzed_data_provider.ConsumeBytesAsString(CMessageHeader::COMMAND_SIZE).c_str()}; |
| 77 | if (!LIMIT_TO_MESSAGE_TYPE.empty() && random_message_type != LIMIT_TO_MESSAGE_TYPE) { |
| 78 | return; |
| 79 | } |
| 80 | CNode& p2p_node = *ConsumeNodeAsUniquePtr(fuzzed_data_provider).release(); |
| 81 | |
| 82 | connman.AddTestNode(p2p_node); |
| 83 | g_setup->m_node.peerman->InitializeNode(&p2p_node); |
| 84 | FillNode(fuzzed_data_provider, connman, *g_setup->m_node.peerman, p2p_node); |
| 85 | |
| 86 | const auto mock_time = ConsumeTime(fuzzed_data_provider); |
| 87 | SetMockTime(mock_time); |
| 88 | |
| 89 | // fuzzed_data_provider is fully consumed after this call, don't use it |
| 90 | CDataStream random_bytes_data_stream{fuzzed_data_provider.ConsumeRemainingBytes<unsigned char>(), SER_NETWORK, PROTOCOL_VERSION}; |
| 91 | try { |
| 92 | g_setup->m_node.peerman->ProcessMessage(p2p_node, random_message_type, random_bytes_data_stream, |
| 93 | GetTime<std::chrono::microseconds>(), std::atomic<bool>{false}); |
| 94 | } catch (const std::ios_base::failure&) { |
| 95 | } |
| 96 | { |
| 97 | LOCK(p2p_node.cs_sendProcessing); |
| 98 | g_setup->m_node.peerman->SendMessages(&p2p_node); |
| 99 | } |
| 100 | SyncWithValidationInterfaceQueue(); |
| 101 | g_setup->m_node.connman->StopNodes(); |
| 102 | } |
| 103 | |
| 104 | FUZZ_TARGET_INIT(process_message, initialize_process_message) { fuzz_target(buffer, ""); } |
| 105 | FUZZ_TARGET_MSG(addr); |
no test coverage detected