Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/addrdb.cpp
Show All 10 Lines | |||||
#include <cassert> | #include <cassert> | ||||
#include <cstdint> | #include <cstdint> | ||||
#include <string> | #include <string> | ||||
#include <vector> | #include <vector> | ||||
void test_one_input(const std::vector<uint8_t> &buffer) { | void test_one_input(const std::vector<uint8_t> &buffer) { | ||||
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); | ||||
const CBanEntry ban_entry = [&] { | [&] { | ||||
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 3)) { | switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 2)) { | ||||
case 0: | case 0: | ||||
return CBanEntry{ | return CBanEntry{ | ||||
fuzzed_data_provider.ConsumeIntegral<int64_t>()}; | fuzzed_data_provider.ConsumeIntegral<int64_t>()}; | ||||
break; | break; | ||||
case 1: | case 1: { | ||||
return CBanEntry{ | |||||
fuzzed_data_provider.ConsumeIntegral<int64_t>(), | |||||
fuzzed_data_provider.PickValueInArray<BanReason>({ | |||||
BanReason::BanReasonUnknown, | |||||
BanReason::BanReasonNodeMisbehaving, | |||||
BanReason::BanReasonManuallyAdded, | |||||
})}; | |||||
break; | |||||
case 2: { | |||||
const Optional<CBanEntry> ban_entry = | const Optional<CBanEntry> ban_entry = | ||||
ConsumeDeserializable<CBanEntry>(fuzzed_data_provider); | ConsumeDeserializable<CBanEntry>(fuzzed_data_provider); | ||||
if (ban_entry) { | if (ban_entry) { | ||||
return *ban_entry; | return *ban_entry; | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
return CBanEntry{}; | return CBanEntry{}; | ||||
}(); | }(); | ||||
assert(!ban_entry.banReasonToString().empty()); | |||||
} | } |