Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/net.cpp
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | CNode node{fuzzed_data_provider.ConsumeIntegral<NodeId>(), | ||||
fuzzed_data_provider.ConsumeIntegral<uint64_t>(), | fuzzed_data_provider.ConsumeIntegral<uint64_t>(), | ||||
*address_bind, | *address_bind, | ||||
fuzzed_data_provider.ConsumeRandomLengthString(32), | fuzzed_data_provider.ConsumeRandomLengthString(32), | ||||
fuzzed_data_provider.PickValueInArray( | fuzzed_data_provider.PickValueInArray( | ||||
{ConnectionType::INBOUND, ConnectionType::OUTBOUND, | {ConnectionType::INBOUND, ConnectionType::OUTBOUND, | ||||
ConnectionType::MANUAL, ConnectionType::FEELER, | ConnectionType::MANUAL, ConnectionType::FEELER, | ||||
ConnectionType::BLOCK_RELAY, ConnectionType::ADDR_FETCH})}; | ConnectionType::BLOCK_RELAY, ConnectionType::ADDR_FETCH})}; | ||||
while (fuzzed_data_provider.ConsumeBool()) { | while (fuzzed_data_provider.ConsumeBool()) { | ||||
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 12)) { | switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 11)) { | ||||
case 0: { | case 0: { | ||||
node.CloseSocketDisconnect(); | node.CloseSocketDisconnect(); | ||||
break; | break; | ||||
} | } | ||||
case 1: { | case 1: { | ||||
node.MaybeSetAddrName( | node.MaybeSetAddrName( | ||||
fuzzed_data_provider.ConsumeRandomLengthString(32)); | fuzzed_data_provider.ConsumeRandomLengthString(32)); | ||||
break; | break; | ||||
} | } | ||||
case 2: { | case 2: { | ||||
node.SetSendVersion( | node.SetCommonVersion( | ||||
fuzzed_data_provider.ConsumeIntegral<int>()); | fuzzed_data_provider.ConsumeIntegral<int>()); | ||||
break; | break; | ||||
} | } | ||||
case 3: { | case 3: { | ||||
const std::vector<bool> asmap = | const std::vector<bool> asmap = | ||||
ConsumeRandomLengthIntegralVector<bool>( | ConsumeRandomLengthIntegralVector<bool>( | ||||
fuzzed_data_provider, 128); | fuzzed_data_provider, 128); | ||||
if (!SanityCheckASMap(asmap)) { | if (!SanityCheckASMap(asmap)) { | ||||
break; | break; | ||||
} | } | ||||
CNodeStats stats; | CNodeStats stats; | ||||
node.copyStats(stats, asmap); | node.copyStats(stats, asmap); | ||||
break; | break; | ||||
} | } | ||||
case 4: { | case 4: { | ||||
node.SetRecvVersion( | |||||
fuzzed_data_provider.ConsumeIntegral<int>()); | |||||
break; | |||||
} | |||||
case 5: { | |||||
const CNode *add_ref_node = node.AddRef(); | const CNode *add_ref_node = node.AddRef(); | ||||
assert(add_ref_node == &node); | assert(add_ref_node == &node); | ||||
break; | break; | ||||
} | } | ||||
case 6: { | case 5: { | ||||
if (node.GetRefCount() > 0) { | if (node.GetRefCount() > 0) { | ||||
node.Release(); | node.Release(); | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
case 7: { | case 6: { | ||||
if (node.m_addr_known == nullptr) { | if (node.m_addr_known == nullptr) { | ||||
break; | break; | ||||
} | } | ||||
const std::optional<CAddress> addr_opt = | const std::optional<CAddress> addr_opt = | ||||
ConsumeDeserializable<CAddress>(fuzzed_data_provider); | ConsumeDeserializable<CAddress>(fuzzed_data_provider); | ||||
if (!addr_opt) { | if (!addr_opt) { | ||||
break; | break; | ||||
} | } | ||||
node.AddAddressKnown(*addr_opt); | node.AddAddressKnown(*addr_opt); | ||||
break; | break; | ||||
} | } | ||||
case 8: { | case 7: { | ||||
if (node.m_addr_known == nullptr) { | if (node.m_addr_known == nullptr) { | ||||
break; | break; | ||||
} | } | ||||
const std::optional<CAddress> addr_opt = | const std::optional<CAddress> addr_opt = | ||||
ConsumeDeserializable<CAddress>(fuzzed_data_provider); | ConsumeDeserializable<CAddress>(fuzzed_data_provider); | ||||
if (!addr_opt) { | if (!addr_opt) { | ||||
break; | break; | ||||
} | } | ||||
FastRandomContext fast_random_context{ | FastRandomContext fast_random_context{ | ||||
ConsumeUInt256(fuzzed_data_provider)}; | ConsumeUInt256(fuzzed_data_provider)}; | ||||
node.PushAddress(*addr_opt, fast_random_context); | node.PushAddress(*addr_opt, fast_random_context); | ||||
break; | break; | ||||
} | } | ||||
case 9: { | case 8: { | ||||
const std::optional<CInv> inv_opt = | const std::optional<CInv> inv_opt = | ||||
ConsumeDeserializable<CInv>(fuzzed_data_provider); | ConsumeDeserializable<CInv>(fuzzed_data_provider); | ||||
if (!inv_opt) { | if (!inv_opt) { | ||||
break; | break; | ||||
} | } | ||||
const TxId &txid = TxId(inv_opt->hash); | const TxId &txid = TxId(inv_opt->hash); | ||||
node.AddKnownTx(txid); | node.AddKnownTx(txid); | ||||
break; | break; | ||||
} | } | ||||
case 10: { | case 9: { | ||||
const TxId &txid = TxId(ConsumeUInt256(fuzzed_data_provider)); | const TxId &txid = TxId(ConsumeUInt256(fuzzed_data_provider)); | ||||
node.PushTxInventory(txid); | node.PushTxInventory(txid); | ||||
break; | break; | ||||
} | } | ||||
case 11: { | case 10: { | ||||
const std::optional<CService> service_opt = | const std::optional<CService> service_opt = | ||||
ConsumeDeserializable<CService>(fuzzed_data_provider); | ConsumeDeserializable<CService>(fuzzed_data_provider); | ||||
if (!service_opt) { | if (!service_opt) { | ||||
break; | break; | ||||
} | } | ||||
node.SetAddrLocal(*service_opt); | node.SetAddrLocal(*service_opt); | ||||
break; | break; | ||||
} | } | ||||
case 12: { | case 11: { | ||||
const std::vector<uint8_t> b = | const std::vector<uint8_t> b = | ||||
ConsumeRandomLengthByteVector(fuzzed_data_provider); | ConsumeRandomLengthByteVector(fuzzed_data_provider); | ||||
bool complete; | bool complete; | ||||
node.ReceiveMsgBytes(config, (const char *)b.data(), b.size(), | node.ReceiveMsgBytes(config, (const char *)b.data(), b.size(), | ||||
complete); | complete); | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
(void)node.GetAddrLocal(); | (void)node.GetAddrLocal(); | ||||
(void)node.GetAddrName(); | (void)node.GetAddrName(); | ||||
(void)node.GetId(); | (void)node.GetId(); | ||||
(void)node.GetLocalNonce(); | (void)node.GetLocalNonce(); | ||||
(void)node.GetLocalServices(); | (void)node.GetLocalServices(); | ||||
(void)node.GetMyStartingHeight(); | (void)node.GetMyStartingHeight(); | ||||
(void)node.GetRecvVersion(); | |||||
const int ref_count = node.GetRefCount(); | const int ref_count = node.GetRefCount(); | ||||
assert(ref_count >= 0); | assert(ref_count >= 0); | ||||
(void)node.GetSendVersion(); | (void)node.GetCommonVersion(); | ||||
(void)node.IsAddrRelayPeer(); | (void)node.IsAddrRelayPeer(); | ||||
const NetPermissionFlags net_permission_flags = | const NetPermissionFlags net_permission_flags = | ||||
fuzzed_data_provider.ConsumeBool() | fuzzed_data_provider.ConsumeBool() | ||||
? fuzzed_data_provider.PickValueInArray<NetPermissionFlags>( | ? fuzzed_data_provider.PickValueInArray<NetPermissionFlags>( | ||||
{NetPermissionFlags::PF_NONE, | {NetPermissionFlags::PF_NONE, | ||||
NetPermissionFlags::PF_BLOOMFILTER, | NetPermissionFlags::PF_BLOOMFILTER, | ||||
NetPermissionFlags::PF_RELAY, | NetPermissionFlags::PF_RELAY, | ||||
NetPermissionFlags::PF_FORCERELAY, | NetPermissionFlags::PF_FORCERELAY, | ||||
NetPermissionFlags::PF_NOBAN, NetPermissionFlags::PF_MEMPOOL, | NetPermissionFlags::PF_NOBAN, NetPermissionFlags::PF_MEMPOOL, | ||||
NetPermissionFlags::PF_ISIMPLICIT, | NetPermissionFlags::PF_ISIMPLICIT, | ||||
NetPermissionFlags::PF_ALL}) | NetPermissionFlags::PF_ALL}) | ||||
: static_cast<NetPermissionFlags>( | : static_cast<NetPermissionFlags>( | ||||
fuzzed_data_provider.ConsumeIntegral<uint32_t>()); | fuzzed_data_provider.ConsumeIntegral<uint32_t>()); | ||||
(void)node.HasPermission(net_permission_flags); | (void)node.HasPermission(net_permission_flags); | ||||
} | } |