@@ -36,52 +36,51 @@ FUZZ_TARGET_INIT(data_stream_addr_man, initialize_addrman)
3636 }
3737}
3838
39- class AddrManDeterministic : public AddrMan
39+ /* *
40+ * Generate a random address. Always returns a valid address.
41+ */
42+ CNetAddr RandAddr (FuzzedDataProvider& fuzzed_data_provider, FastRandomContext& fast_random_context)
4043{
41- public:
42- explicit AddrManDeterministic (std::vector<bool > asmap, FuzzedDataProvider& fuzzed_data_provider)
43- : AddrMan(std::move(asmap), /* deterministic */ true, /* consistency_check_ratio */ 0)
44- {
45- WITH_LOCK (m_impl->cs , m_impl->insecure_rand = FastRandomContext{ConsumeUInt256 (fuzzed_data_provider)});
46- }
44+ CNetAddr addr;
45+ if (fuzzed_data_provider.remaining_bytes () > 1 && fuzzed_data_provider.ConsumeBool ()) {
46+ addr = ConsumeNetAddr (fuzzed_data_provider);
47+ } else {
48+ // The networks [1..6] correspond to CNetAddr::BIP155Network (private).
49+ static const std::map<uint8_t , uint8_t > net_len_map = {{1 , ADDR_IPV4_SIZE},
50+ {2 , ADDR_IPV6_SIZE},
51+ {4 , ADDR_TORV3_SIZE},
52+ {5 , ADDR_I2P_SIZE},
53+ {6 , ADDR_CJDNS_SIZE}};
54+ uint8_t net = fast_random_context.randrange (5 ) + 1 ; // [1..5]
55+ if (net == 3 ) {
56+ net = 6 ;
57+ }
4758
48- /* *
49- * Generate a random address. Always returns a valid address.
50- */
51- CNetAddr RandAddr (FuzzedDataProvider& fuzzed_data_provider, FastRandomContext& fast_random_context)
52- EXCLUSIVE_LOCKS_REQUIRED(m_impl->cs)
53- {
54- CNetAddr addr;
55- if (fuzzed_data_provider.remaining_bytes () > 1 && fuzzed_data_provider.ConsumeBool ()) {
56- addr = ConsumeNetAddr (fuzzed_data_provider);
57- } else {
58- // The networks [1..6] correspond to CNetAddr::BIP155Network (private).
59- static const std::map<uint8_t , uint8_t > net_len_map = {{1 , ADDR_IPV4_SIZE},
60- {2 , ADDR_IPV6_SIZE},
61- {4 , ADDR_TORV3_SIZE},
62- {5 , ADDR_I2P_SIZE},
63- {6 , ADDR_CJDNS_SIZE}};
64- uint8_t net = fast_random_context.randrange (5 ) + 1 ; // [1..5]
65- if (net == 3 ) {
66- net = 6 ;
67- }
59+ CDataStream s (SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
6860
69- CDataStream s (SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
61+ s << net;
62+ s << fast_random_context.randbytes (net_len_map.at (net));
7063
71- s << net ;
72- s << fast_random_context. randbytes (net_len_map. at (net));
64+ s >> addr ;
65+ }
7366
74- s >> addr;
75- }
67+ // Return a dummy IPv4 5.5.5.5 if we generated an invalid address.
68+ if (!addr.IsValid ()) {
69+ in_addr v4_addr = {};
70+ v4_addr.s_addr = 0x05050505 ;
71+ addr = CNetAddr{v4_addr};
72+ }
7673
77- // Return a dummy IPv4 5.5.5.5 if we generated an invalid address.
78- if (!addr.IsValid ()) {
79- in_addr v4_addr = {};
80- v4_addr.s_addr = 0x05050505 ;
81- addr = CNetAddr{v4_addr};
82- }
74+ return addr;
75+ }
8376
84- return addr;
77+ class AddrManDeterministic : public AddrMan
78+ {
79+ public:
80+ explicit AddrManDeterministic (std::vector<bool > asmap, FuzzedDataProvider& fuzzed_data_provider)
81+ : AddrMan(std::move(asmap), /* deterministic */ true, /* consistency_check_ratio */ 0)
82+ {
83+ WITH_LOCK (m_impl->cs , m_impl->insecure_rand = FastRandomContext{ConsumeUInt256 (fuzzed_data_provider)});
8584 }
8685
8786 /* *
0 commit comments