mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 11:57:28 -03:00
fuzz: Make addrman fuzzing harness deterministic
This commit is contained in:
parent
3457054c61
commit
17a5f172fa
2 changed files with 14 additions and 3 deletions
|
@ -22,12 +22,22 @@ void initialize()
|
||||||
SelectParams(CBaseChainParams::REGTEST);
|
SelectParams(CBaseChainParams::REGTEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CAddrManDeterministic : public CAddrMan
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void MakeDeterministic(const uint256& random_seed)
|
||||||
|
{
|
||||||
|
insecure_rand = FastRandomContext{random_seed};
|
||||||
|
Clear();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
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());
|
||||||
|
|
||||||
SetMockTime(ConsumeTime(fuzzed_data_provider));
|
SetMockTime(ConsumeTime(fuzzed_data_provider));
|
||||||
CAddrMan addr_man;
|
CAddrManDeterministic addr_man;
|
||||||
|
addr_man.MakeDeterministic(ConsumeUInt256(fuzzed_data_provider));
|
||||||
if (fuzzed_data_provider.ConsumeBool()) {
|
if (fuzzed_data_provider.ConsumeBool()) {
|
||||||
addr_man.m_asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider);
|
addr_man.m_asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider);
|
||||||
if (!SanityCheckASMap(addr_man.m_asmap)) {
|
if (!SanityCheckASMap(addr_man.m_asmap)) {
|
||||||
|
|
|
@ -98,7 +98,8 @@ NODISCARD inline CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider)
|
||||||
|
|
||||||
NODISCARD inline int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider) noexcept
|
NODISCARD inline int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider) noexcept
|
||||||
{
|
{
|
||||||
static const int64_t time_min = ParseISO8601DateTime("1970-01-01T00:00:00Z");
|
// Avoid t=0 (1970-01-01T00:00:00Z) since SetMockTime(0) is a no-op.
|
||||||
|
static const int64_t time_min = ParseISO8601DateTime("1970-01-01T00:00:01Z");
|
||||||
static const int64_t time_max = ParseISO8601DateTime("9999-12-31T23:59:59Z");
|
static const int64_t time_max = ParseISO8601DateTime("9999-12-31T23:59:59Z");
|
||||||
return fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(time_min, time_max);
|
return fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(time_min, time_max);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue