Skip to content

Commit dfd0b70

Browse files
author
MarcoFalke
committed
Merge #20425: fuzz: Make CAddrMan fuzzing harness deterministic
17a5f17 fuzz: Make addrman fuzzing harness deterministic (practicalswift) Pull request description: Make `CAddrMan` fuzzing harness deterministic. See [`doc/fuzzing.md`](https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md) for information on how to fuzz Bitcoin Core. Don't forget to contribute any coverage increasing inputs you find to the [Bitcoin Core fuzzing corpus repo](https://github.com/bitcoin-core/qa-assets). Happy fuzzing :) ACKs for top commit: Crypt-iQ: utACK 17a5f17 Tree-SHA512: 725f983745233e9b616782247fa18847e483c074ca4336a5beea8a9009128c3a74b4d50a12662d8ca2177c2e1fc5fc121834df6b459ac0af43c931d77ef7c4d8
2 parents 277c225 + 17a5f17 commit dfd0b70

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/test/fuzz/addrman.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,22 @@ void initialize()
2222
SelectParams(CBaseChainParams::REGTEST);
2323
}
2424

25+
class CAddrManDeterministic : public CAddrMan
26+
{
27+
public:
28+
void MakeDeterministic(const uint256& random_seed)
29+
{
30+
insecure_rand = FastRandomContext{random_seed};
31+
Clear();
32+
}
33+
};
34+
2535
void test_one_input(const std::vector<uint8_t>& buffer)
2636
{
2737
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
28-
2938
SetMockTime(ConsumeTime(fuzzed_data_provider));
30-
CAddrMan addr_man;
39+
CAddrManDeterministic addr_man;
40+
addr_man.MakeDeterministic(ConsumeUInt256(fuzzed_data_provider));
3141
if (fuzzed_data_provider.ConsumeBool()) {
3242
addr_man.m_asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider);
3343
if (!SanityCheckASMap(addr_man.m_asmap)) {

src/test/fuzz/util.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ template <typename T>
9898

9999
[[nodiscard]] inline int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider) noexcept
100100
{
101-
static const int64_t time_min = ParseISO8601DateTime("1970-01-01T00:00:00Z");
101+
// Avoid t=0 (1970-01-01T00:00:00Z) since SetMockTime(0) is a no-op.
102+
static const int64_t time_min = ParseISO8601DateTime("1970-01-01T00:00:01Z");
102103
static const int64_t time_max = ParseISO8601DateTime("9999-12-31T23:59:59Z");
103104
return fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(time_min, time_max);
104105
}

0 commit comments

Comments
 (0)