| 40 | } |
| 41 | |
| 42 | FUZZ_TARGET_INIT(banman, initialize_banman) |
| 43 | { |
| 44 | FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; |
| 45 | SetMockTime(ConsumeTime(fuzzed_data_provider)); |
| 46 | fs::path banlist_file = gArgs.GetDataDirNet() / "fuzzed_banlist"; |
| 47 | |
| 48 | const bool start_with_corrupted_banlist{fuzzed_data_provider.ConsumeBool()}; |
| 49 | bool force_read_and_write_to_err{false}; |
| 50 | if (start_with_corrupted_banlist) { |
| 51 | assert(WriteBinaryFile(banlist_file + ".json", |
| 52 | fuzzed_data_provider.ConsumeRandomLengthString())); |
| 53 | } else { |
| 54 | force_read_and_write_to_err = fuzzed_data_provider.ConsumeBool(); |
| 55 | if (force_read_and_write_to_err) { |
| 56 | banlist_file = fs::path{"path"} / "to" / "inaccessible" / "fuzzed_banlist"; |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | { |
| 61 | BanMan ban_man{banlist_file, /*client_interface=*/nullptr, /*default_ban_time=*/ConsumeBanTimeOffset(fuzzed_data_provider)}; |
| 62 | // The complexity is O(N^2), where N is the input size, because each call |
| 63 | // might call DumpBanlist (or other methods that are at least linear |
| 64 | // complexity of the input size). |
| 65 | LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 300) |
| 66 | { |
| 67 | CallOneOf( |
| 68 | fuzzed_data_provider, |
| 69 | [&] { |
| 70 | ban_man.Ban(ConsumeNetAddr(fuzzed_data_provider), |
| 71 | ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool()); |
| 72 | }, |
| 73 | [&] { |
| 74 | ban_man.Ban(ConsumeSubNet(fuzzed_data_provider), |
| 75 | ConsumeBanTimeOffset(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool()); |
| 76 | }, |
| 77 | [&] { |
| 78 | ban_man.ClearBanned(); |
| 79 | }, |
| 80 | [&] { |
| 81 | ban_man.IsBanned(ConsumeNetAddr(fuzzed_data_provider)); |
| 82 | }, |
| 83 | [&] { |
| 84 | ban_man.IsBanned(ConsumeSubNet(fuzzed_data_provider)); |
| 85 | }, |
| 86 | [&] { |
| 87 | ban_man.Unban(ConsumeNetAddr(fuzzed_data_provider)); |
| 88 | }, |
| 89 | [&] { |
| 90 | ban_man.Unban(ConsumeSubNet(fuzzed_data_provider)); |
| 91 | }, |
| 92 | [&] { |
| 93 | banmap_t banmap; |
| 94 | ban_man.GetBanned(banmap); |
| 95 | }, |
| 96 | [&] { |
| 97 | ban_man.DumpBanlist(); |
| 98 | }, |
| 99 | [&] { |
nothing calls this directly
no test coverage detected