aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordergoegge <n.goeggi@gmail.com>2023-12-06 16:03:57 +0000
committerdergoegge <n.goeggi@gmail.com>2023-12-06 16:04:21 +0000
commit9f265d88253ed464413dea5614fa13dea0d8cfd5 (patch)
tree5279e79f1f785990a7026169161eba00eb46532f /src
parentfae1e7e012571201fd51c547ba4fb6044be9aeb5 (diff)
downloadbitcoin-9f265d88253ed464413dea5614fa13dea0d8cfd5.tar.xz
fuzz: Detect deadlocks in process_message
Diffstat (limited to 'src')
-rw-r--r--src/test/fuzz/process_message.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/test/fuzz/process_message.cpp b/src/test/fuzz/process_message.cpp
index 6392f03d4e..acb03ac5fc 100644
--- a/src/test/fuzz/process_message.cpp
+++ b/src/test/fuzz/process_message.cpp
@@ -79,14 +79,23 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
const auto mock_time = ConsumeTime(fuzzed_data_provider);
SetMockTime(mock_time);
+ CSerializedNetMsg net_msg;
+ net_msg.m_type = random_message_type;
// fuzzed_data_provider is fully consumed after this call, don't use it
- DataStream random_bytes_data_stream{fuzzed_data_provider.ConsumeRemainingBytes<unsigned char>()};
- try {
- g_setup->m_node.peerman->ProcessMessage(p2p_node, random_message_type, random_bytes_data_stream,
- GetTime<std::chrono::microseconds>(), std::atomic<bool>{false});
- } catch (const std::ios_base::failure&) {
+ net_msg.data = fuzzed_data_provider.ConsumeRemainingBytes<unsigned char>();
+
+ connman.FlushSendBuffer(p2p_node);
+ (void)connman.ReceiveMsgFrom(p2p_node, std::move(net_msg));
+
+ bool more_work{true};
+ while (more_work) {
+ p2p_node.fPauseSend = false;
+ try {
+ more_work = connman.ProcessMessagesOnce(p2p_node);
+ } catch (const std::ios_base::failure&) {
+ }
+ g_setup->m_node.peerman->SendMessages(&p2p_node);
}
- g_setup->m_node.peerman->SendMessages(&p2p_node);
SyncWithValidationInterfaceQueue();
g_setup->m_node.connman->StopNodes();
}