Does the string representation make it harder for the fuzz engine to reach coverage?
Hm, yes, perhaps an alternative to facilitate it (didnt test yet, just wondering):
+ CSubNet subnet;
+ CNetAddr net_addr;
LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 300)
{
CallOneOf(
fuzzed_data_provider,
[&] {
- const std::string name{fuzzed_data_provider.ConsumeRandomLengthString(512)};
- if (const std::optional<CNetAddr>& addr{LookupHost(name, /*fAllowLookup=*/false)}) {
- ban_man.Ban(addr.value(), ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool());
+ CSubNet new_subnet{ConsumeSubNet(fuzzed_data_provider)};
+ if (LookupSubNet(new_subnet.ToString(), new_subnet)) {
+ subnet = new_subnet;
}
},
[&] {
- const std::string name{fuzzed_data_provider.ConsumeRandomLengthString(512)};
- CSubNet subnet;
- if (LookupSubNet(name, subnet)) {
- ban_man.Ban(subnet, ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool());
+ CNetAddr new_netaddr{ConsumeNetAddr(fuzzed_data_provider)};
+ if (const std::optional<CNetAddr>& addr{LookupHost(new_netaddr.ToStringAddr(), /*fAllowLookup=*/false)}) {
+ net_addr = addr.value();
}
},
+ [&] {
+ ban_man.Ban(net_addr, ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool());
+ },
+ [&] {
+ ban_man.Ban(subnet, ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool());
+ },
[&] {
ban_man.ClearBanned();
},
[&] {
- ban_man.IsBanned(ConsumeNetAddr(fuzzed_data_provider));
+ ban_man.IsBanned(net_addr);
},
[&] {
- ban_man.IsBanned(ConsumeSubNet(fuzzed_data_provider));
+ ban_man.IsBanned(subnet);
},
[&] {
- ban_man.Unban(ConsumeNetAddr(fuzzed_data_provider));
+ ban_man.Unban(net_addr);
},
[&] {
- ban_man.Unban(ConsumeSubNet(fuzzed_data_provider));
+ ban_man.Unban(subnet);
},
[&] {
banmap_t banmap;
@@ -103,7 +110,7 @@ FUZZ_TARGET(banman, .init = initialize_banman)
ban_man.DumpBanlist();
},
[&] {
- ban_man.Discourage(ConsumeNetAddr(fuzzed_data_provider));
+ ban_man.Discourage(net_addr);
});
}