Skip to content

Commit 9f265d8

Browse files
committed
fuzz: Detect deadlocks in process_message
1 parent fae1e7e commit 9f265d8

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/test/fuzz/process_message.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,23 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
7979
const auto mock_time = ConsumeTime(fuzzed_data_provider);
8080
SetMockTime(mock_time);
8181

82+
CSerializedNetMsg net_msg;
83+
net_msg.m_type = random_message_type;
8284
// fuzzed_data_provider is fully consumed after this call, don't use it
83-
DataStream random_bytes_data_stream{fuzzed_data_provider.ConsumeRemainingBytes<unsigned char>()};
84-
try {
85-
g_setup->m_node.peerman->ProcessMessage(p2p_node, random_message_type, random_bytes_data_stream,
86-
GetTime<std::chrono::microseconds>(), std::atomic<bool>{false});
87-
} catch (const std::ios_base::failure&) {
85+
net_msg.data = fuzzed_data_provider.ConsumeRemainingBytes<unsigned char>();
86+
87+
connman.FlushSendBuffer(p2p_node);
88+
(void)connman.ReceiveMsgFrom(p2p_node, std::move(net_msg));
89+
90+
bool more_work{true};
91+
while (more_work) {
92+
p2p_node.fPauseSend = false;
93+
try {
94+
more_work = connman.ProcessMessagesOnce(p2p_node);
95+
} catch (const std::ios_base::failure&) {
96+
}
97+
g_setup->m_node.peerman->SendMessages(&p2p_node);
8898
}
89-
g_setup->m_node.peerman->SendMessages(&p2p_node);
9099
SyncWithValidationInterfaceQueue();
91100
g_setup->m_node.connman->StopNodes();
92101
}

0 commit comments

Comments
 (0)