mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-16 13:01:19 +02:00
fuzz: Introduce CallOneOf helper to replace switch-case
Can be reviewed with --ignore-all-space
This commit is contained in:
parent
9c0b76c709
commit
fa75d40ef8
19 changed files with 1097 additions and 1217 deletions
|
|
@ -32,85 +32,74 @@ FUZZ_TARGET_INIT(net, initialize_net)
|
|||
CNode node{ConsumeNode(fuzzed_data_provider)};
|
||||
node.SetCommonVersion(fuzzed_data_provider.ConsumeIntegral<int>());
|
||||
while (fuzzed_data_provider.ConsumeBool()) {
|
||||
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 10)) {
|
||||
case 0: {
|
||||
node.CloseSocketDisconnect();
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
node.MaybeSetAddrName(fuzzed_data_provider.ConsumeRandomLengthString(32));
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
const std::vector<bool> asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider);
|
||||
if (!SanityCheckASMap(asmap)) {
|
||||
break;
|
||||
}
|
||||
CNodeStats stats;
|
||||
node.copyStats(stats, asmap);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
const CNode* add_ref_node = node.AddRef();
|
||||
assert(add_ref_node == &node);
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
if (node.GetRefCount() > 0) {
|
||||
node.Release();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
if (node.m_addr_known == nullptr) {
|
||||
break;
|
||||
}
|
||||
const std::optional<CAddress> addr_opt = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
|
||||
if (!addr_opt) {
|
||||
break;
|
||||
}
|
||||
node.AddAddressKnown(*addr_opt);
|
||||
break;
|
||||
}
|
||||
case 6: {
|
||||
if (node.m_addr_known == nullptr) {
|
||||
break;
|
||||
}
|
||||
const std::optional<CAddress> addr_opt = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
|
||||
if (!addr_opt) {
|
||||
break;
|
||||
}
|
||||
FastRandomContext fast_random_context{ConsumeUInt256(fuzzed_data_provider)};
|
||||
node.PushAddress(*addr_opt, fast_random_context);
|
||||
break;
|
||||
}
|
||||
case 7: {
|
||||
const std::optional<CInv> inv_opt = ConsumeDeserializable<CInv>(fuzzed_data_provider);
|
||||
if (!inv_opt) {
|
||||
break;
|
||||
}
|
||||
node.AddKnownTx(inv_opt->hash);
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
node.PushTxInventory(ConsumeUInt256(fuzzed_data_provider));
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
const std::optional<CService> service_opt = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
||||
if (!service_opt) {
|
||||
break;
|
||||
}
|
||||
node.SetAddrLocal(*service_opt);
|
||||
break;
|
||||
}
|
||||
case 10: {
|
||||
const std::vector<uint8_t> b = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
||||
bool complete;
|
||||
node.ReceiveMsgBytes(b, complete);
|
||||
break;
|
||||
}
|
||||
}
|
||||
CallOneOf(
|
||||
fuzzed_data_provider,
|
||||
[&] {
|
||||
node.CloseSocketDisconnect();
|
||||
},
|
||||
[&] {
|
||||
node.MaybeSetAddrName(fuzzed_data_provider.ConsumeRandomLengthString(32));
|
||||
},
|
||||
[&] {
|
||||
const std::vector<bool> asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider);
|
||||
if (!SanityCheckASMap(asmap)) {
|
||||
return;
|
||||
}
|
||||
CNodeStats stats;
|
||||
node.copyStats(stats, asmap);
|
||||
},
|
||||
[&] {
|
||||
const CNode* add_ref_node = node.AddRef();
|
||||
assert(add_ref_node == &node);
|
||||
},
|
||||
[&] {
|
||||
if (node.GetRefCount() > 0) {
|
||||
node.Release();
|
||||
}
|
||||
},
|
||||
[&] {
|
||||
if (node.m_addr_known == nullptr) {
|
||||
return;
|
||||
}
|
||||
const std::optional<CAddress> addr_opt = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
|
||||
if (!addr_opt) {
|
||||
return;
|
||||
}
|
||||
node.AddAddressKnown(*addr_opt);
|
||||
},
|
||||
[&] {
|
||||
if (node.m_addr_known == nullptr) {
|
||||
return;
|
||||
}
|
||||
const std::optional<CAddress> addr_opt = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
|
||||
if (!addr_opt) {
|
||||
return;
|
||||
}
|
||||
FastRandomContext fast_random_context{ConsumeUInt256(fuzzed_data_provider)};
|
||||
node.PushAddress(*addr_opt, fast_random_context);
|
||||
},
|
||||
[&] {
|
||||
const std::optional<CInv> inv_opt = ConsumeDeserializable<CInv>(fuzzed_data_provider);
|
||||
if (!inv_opt) {
|
||||
return;
|
||||
}
|
||||
node.AddKnownTx(inv_opt->hash);
|
||||
},
|
||||
[&] {
|
||||
node.PushTxInventory(ConsumeUInt256(fuzzed_data_provider));
|
||||
},
|
||||
[&] {
|
||||
const std::optional<CService> service_opt = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
||||
if (!service_opt) {
|
||||
return;
|
||||
}
|
||||
node.SetAddrLocal(*service_opt);
|
||||
},
|
||||
[&] {
|
||||
const std::vector<uint8_t> b = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
||||
bool complete;
|
||||
node.ReceiveMsgBytes(b, complete);
|
||||
});
|
||||
}
|
||||
|
||||
(void)node.GetAddrLocal();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue