MCPcopy Create free account
hub / github.com/ElementsProject/elements / RandAddr

Function RandAddr

src/test/fuzz/addrman.cpp:54–87  ·  view source on GitHub ↗

* Generate a random address. Always returns a valid address. */

Source from the content-addressed store, hash-verified

52 * Generate a random address. Always returns a valid address.
53 */
54CNetAddr RandAddr(FuzzedDataProvider& fuzzed_data_provider, FastRandomContext& fast_random_context)
55{
56 CNetAddr addr;
57 if (fuzzed_data_provider.remaining_bytes() > 1 && fuzzed_data_provider.ConsumeBool()) {
58 addr = ConsumeNetAddr(fuzzed_data_provider);
59 } else {
60 // The networks [1..6] correspond to CNetAddr::BIP155Network (private).
61 static const std::map<uint8_t, uint8_t> net_len_map = {{1, ADDR_IPV4_SIZE},
62 {2, ADDR_IPV6_SIZE},
63 {4, ADDR_TORV3_SIZE},
64 {5, ADDR_I2P_SIZE},
65 {6, ADDR_CJDNS_SIZE}};
66 uint8_t net = fast_random_context.randrange(5) + 1; // [1..5]
67 if (net == 3) {
68 net = 6;
69 }
70
71 CDataStream s(SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
72
73 s << net;
74 s << fast_random_context.randbytes(net_len_map.at(net));
75
76 s >> addr;
77 }
78
79 // Return a dummy IPv4 5.5.5.5 if we generated an invalid address.
80 if (!addr.IsValid()) {
81 in_addr v4_addr = {};
82 v4_addr.s_addr = 0x05050505;
83 addr = CNetAddr{v4_addr};
84 }
85
86 return addr;
87}
88
89/** Fill addrman with lots of addresses from lots of sources. */
90void FillAddrman(AddrMan& addrman, FuzzedDataProvider& fuzzed_data_provider)

Callers 1

FillAddrmanFunction · 0.85

Calls 6

ConsumeNetAddrFunction · 0.85
remaining_bytesMethod · 0.80
ConsumeBoolMethod · 0.80
randrangeMethod · 0.80
randbytesMethod · 0.80
IsValidMethod · 0.45

Tested by

no test coverage detected