2020
2121namespace {
2222const 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+
2329} // namespace
2430
2531void initialize_connman ()
@@ -32,9 +38,21 @@ FUZZ_TARGET(connman, .init = initialize_connman)
3238{
3339 FuzzedDataProvider fuzzed_data_provider{buffer.data (), buffer.size ()};
3440 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};
3553 ConnmanTestMsg connman{fuzzed_data_provider.ConsumeIntegral <uint64_t >(),
3654 fuzzed_data_provider.ConsumeIntegral <uint64_t >(),
37- *g_setup-> m_node . addrman ,
55+ addr_man ,
3856 *g_setup->m_node .netgroupman ,
3957 Params (),
4058 fuzzed_data_provider.ConsumeBool ()};
0 commit comments