@@ -286,9 +286,10 @@ inline CAddress ConsumeAddress(FuzzedDataProvider& fuzzed_data_provider) noexcep
286
286
return {ConsumeService (fuzzed_data_provider), static_cast <ServiceFlags>(fuzzed_data_provider.ConsumeIntegral <uint64_t >()), fuzzed_data_provider.ConsumeIntegral <uint32_t >()};
287
287
}
288
288
289
- inline CNode ConsumeNode (FuzzedDataProvider& fuzzed_data_provider) noexcept
289
+ template <bool ReturnUniquePtr = false >
290
+ auto ConsumeNode (FuzzedDataProvider& fuzzed_data_provider, const std::optional<NodeId>& node_id_in = nullopt) noexcept
290
291
{
291
- const NodeId node_id = fuzzed_data_provider.ConsumeIntegral <NodeId>();
292
+ const NodeId node_id = node_id_in. value_or ( fuzzed_data_provider.ConsumeIntegral <NodeId>() );
292
293
const ServiceFlags local_services = static_cast <ServiceFlags>(fuzzed_data_provider.ConsumeIntegral <uint64_t >());
293
294
const SOCKET socket = INVALID_SOCKET;
294
295
const CAddress address = ConsumeAddress (fuzzed_data_provider);
@@ -298,8 +299,13 @@ inline CNode ConsumeNode(FuzzedDataProvider& fuzzed_data_provider) noexcept
298
299
const std::string addr_name = fuzzed_data_provider.ConsumeRandomLengthString (64 );
299
300
const ConnectionType conn_type = fuzzed_data_provider.PickValueInArray ({ConnectionType::INBOUND, ConnectionType::OUTBOUND_FULL_RELAY, ConnectionType::MANUAL, ConnectionType::FEELER, ConnectionType::BLOCK_RELAY, ConnectionType::ADDR_FETCH});
300
301
const bool inbound_onion{conn_type == ConnectionType::INBOUND ? fuzzed_data_provider.ConsumeBool () : false };
301
- return {node_id, local_services, socket, address, keyed_net_group, local_host_nonce, addr_bind, addr_name, conn_type, inbound_onion};
302
+ if constexpr (ReturnUniquePtr) {
303
+ return std::make_unique<CNode>(node_id, local_services, socket, address, keyed_net_group, local_host_nonce, addr_bind, addr_name, conn_type, inbound_onion);
304
+ } else {
305
+ return CNode{node_id, local_services, socket, address, keyed_net_group, local_host_nonce, addr_bind, addr_name, conn_type, inbound_onion};
306
+ }
302
307
}
308
+ inline std::unique_ptr<CNode> ConsumeNodeAsUniquePtr (FuzzedDataProvider& fdp, const std::optional<NodeId>& node_id_in = nullopt) { return ConsumeNode<true >(fdp, node_id_in); }
303
309
304
310
inline void InitializeFuzzingContext (const std::string& chain_name = CBaseChainParams::REGTEST)
305
311
{
0 commit comments