MCPcopy Create free account
hub / github.com/ElementsProject/elements / fuzz_target

Function fuzz_target

src/test/fuzz/process_message.cpp:67–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65}
66
67void 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
104FUZZ_TARGET_INIT(process_message, initialize_process_message) { fuzz_target(buffer, ""); }
105FUZZ_TARGET_MSG(addr);

Callers 1

FUZZ_TARGET_INITFunction · 0.85

Calls 15

SetMockTimeFunction · 0.85
ConsumeNodeAsUniquePtrFunction · 0.85
FillNodeFunction · 0.85
ConsumeTimeFunction · 0.85
ResetIbdMethod · 0.80
ConsumeBytesAsStringMethod · 0.80
releaseMethod · 0.80
AddTestNodeMethod · 0.80
InitializeNodeMethod · 0.80
ProcessMessageMethod · 0.80
SendMessagesMethod · 0.80

Tested by

no test coverage detected