20
20
21
21
namespace {
22
22
const TestingSetup* g_setup;
23
+
24
+ int32_t GetCheckRatio ()
25
+ {
26
+ return std::clamp<int32_t >(g_setup->m_node .args ->GetIntArg (" -checkaddrman" , 0 ), 0 , 1000000 );
27
+ }
28
+
23
29
} // namespace
24
30
25
31
void initialize_connman ()
@@ -32,9 +38,21 @@ FUZZ_TARGET(connman, .init = initialize_connman)
32
38
{
33
39
FuzzedDataProvider fuzzed_data_provider{buffer.data (), buffer.size ()};
34
40
SetMockTime (ConsumeTime (fuzzed_data_provider));
41
+ auto netgroupman{*g_setup->m_node .netgroupman };
42
+ auto addr_man_ptr{std::make_unique<AddrManDeterministic>(netgroupman, fuzzed_data_provider, GetCheckRatio ())};
43
+ if (fuzzed_data_provider.ConsumeBool ()) {
44
+ const std::vector<uint8_t > serialized_data{ConsumeRandomLengthByteVector (fuzzed_data_provider)};
45
+ DataStream ds{serialized_data};
46
+ try {
47
+ ds >> *addr_man_ptr;
48
+ } catch (const std::ios_base::failure&) {
49
+ addr_man_ptr = std::make_unique<AddrManDeterministic>(netgroupman, fuzzed_data_provider, GetCheckRatio ());
50
+ }
51
+ }
52
+ AddrManDeterministic& addr_man{*addr_man_ptr};
35
53
ConnmanTestMsg connman{fuzzed_data_provider.ConsumeIntegral <uint64_t >(),
36
54
fuzzed_data_provider.ConsumeIntegral <uint64_t >(),
37
- *g_setup-> m_node . addrman ,
55
+ addr_man ,
38
56
*g_setup->m_node .netgroupman ,
39
57
Params (),
40
58
fuzzed_data_provider.ConsumeBool ()};
0 commit comments