Skip to content

Commit fa19bab

Browse files
author
MarcoFalke
committed
fuzz: Rework FillNode
1 parent fae6e31 commit fa19bab

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

src/test/fuzz/util.cpp

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <consensus/amount.h>
6+
#include <net_processing.h>
7+
#include <netmessagemaker.h>
68
#include <pubkey.h>
79
#include <test/fuzz/util.h>
810
#include <test/util/script.h>
@@ -203,22 +205,54 @@ bool FuzzedSock::IsConnected(std::string& errmsg) const
203205
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, CNode& node) noexcept
204206
{
205207
const bool successfully_connected{fuzzed_data_provider.ConsumeBool()};
206-
node.fSuccessfullyConnected = successfully_connected;
207208
const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
208209
const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
209210
const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
210211
const bool filter_txs = fuzzed_data_provider.ConsumeBool();
211212

213+
const CNetMsgMaker mm{0};
214+
215+
CSerializedNetMsg msg_version{
216+
mm.Make(NetMsgType::VERSION,
217+
version, //
218+
Using<CustomUintFormatter<8>>(remote_services), //
219+
int64_t{}, // dummy time
220+
int64_t{}, // ignored service bits
221+
CService{}, // dummy
222+
int64_t{}, // ignored service bits
223+
CService{}, // ignored
224+
uint64_t{1}, // dummy nonce
225+
std::string{}, // dummy subver
226+
int32_t{}, // dummy starting_height
227+
filter_txs),
228+
};
229+
230+
(void)connman.ReceiveMsgFrom(node, msg_version);
212231
node.fPauseSend = false;
213-
node.nServices = remote_services;
214-
node.m_permissionFlags = permission_flags;
215-
if (successfully_connected) {
216-
node.nVersion = version;
217-
node.SetCommonVersion(std::min(version, PROTOCOL_VERSION));
232+
connman.ProcessMessagesOnce(node);
233+
{
234+
LOCK(node.cs_sendProcessing);
235+
peerman.SendMessages(&node);
218236
}
237+
if (node.fDisconnect) return;
238+
assert(node.nVersion == version);
239+
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
240+
assert(node.nServices == remote_services);
219241
if (node.m_tx_relay != nullptr) {
220242
LOCK(node.m_tx_relay->cs_filter);
221-
node.m_tx_relay->fRelayTxes = filter_txs;
243+
assert(node.m_tx_relay->fRelayTxes == filter_txs);
244+
}
245+
node.m_permissionFlags = permission_flags;
246+
if (successfully_connected) {
247+
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};
248+
(void)connman.ReceiveMsgFrom(node, msg_verack);
249+
node.fPauseSend = false;
250+
connman.ProcessMessagesOnce(node);
251+
{
252+
LOCK(node.cs_sendProcessing);
253+
peerman.SendMessages(&node);
254+
}
255+
assert(node.fSuccessfullyConnected == true);
222256
}
223257
}
224258

0 commit comments

Comments
 (0)