fuzz: Speed up banman fuzz target

This commit is contained in:
MarcoFalke 2021-05-20 18:06:41 +02:00
parent ea8b2e8e12
commit fae0f836be
No known key found for this signature in database
GPG Key ID: CE2B75697E69A548

View File

@ -32,13 +32,17 @@ void initialize_banman()
FUZZ_TARGET_INIT(banman, initialize_banman) FUZZ_TARGET_INIT(banman, initialize_banman)
{ {
// The complexity is O(N^2), where N is the input size, because each call
// might call DumpBanlist (or other methods that are at least linear
// complexity of the input size).
int limit_max_ops{300};
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
SetMockTime(ConsumeTime(fuzzed_data_provider)); SetMockTime(ConsumeTime(fuzzed_data_provider));
const fs::path banlist_file = GetDataDir() / "fuzzed_banlist.dat"; const fs::path banlist_file = GetDataDir() / "fuzzed_banlist.dat";
fs::remove(banlist_file); fs::remove(banlist_file);
{ {
BanMan ban_man{banlist_file, nullptr, ConsumeBanTimeOffset(fuzzed_data_provider)}; BanMan ban_man{banlist_file, nullptr, ConsumeBanTimeOffset(fuzzed_data_provider)};
while (fuzzed_data_provider.ConsumeBool()) { while (--limit_max_ops >= 0 && fuzzed_data_provider.ConsumeBool()) {
CallOneOf( CallOneOf(
fuzzed_data_provider, fuzzed_data_provider,
[&] { [&] {
@ -52,7 +56,6 @@ FUZZ_TARGET_INIT(banman, initialize_banman)
[&] { [&] {
ban_man.ClearBanned(); ban_man.ClearBanned();
}, },
[] {},
[&] { [&] {
ban_man.IsBanned(ConsumeNetAddr(fuzzed_data_provider)); ban_man.IsBanned(ConsumeNetAddr(fuzzed_data_provider));
}, },
@ -72,7 +75,6 @@ FUZZ_TARGET_INIT(banman, initialize_banman)
[&] { [&] {
ban_man.DumpBanlist(); ban_man.DumpBanlist();
}, },
[] {},
[&] { [&] {
ban_man.Discourage(ConsumeNetAddr(fuzzed_data_provider)); ban_man.Discourage(ConsumeNetAddr(fuzzed_data_provider));
}); });