Skip to content

Commit fe62463

Browse files
committed
fuzz: fuzz connman with a non-empty addrman
1 parent 0a12cff commit fe62463

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/test/fuzz/connman.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020

2121
namespace {
2222
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+
2329
} // namespace
2430

2531
void 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

Comments
 (0)