Skip to content

Commit 7015082

Browse files
author
MarcoFalke
committed
Merge #20437: fuzz: Avoid time-based "non-determinism" in fuzzing harnesses by using mocked GetTime()
8c09c0c fuzz: Avoid time-based "non-determinism" in fuzzing harnesses by using mocked GetTime() (practicalswift) Pull request description: Avoid time-based "non-determinism" in fuzzing harnesses by using mocked `GetTime()`. Prior to this commit the fuzzing harnesses `banman`, `connman`, `net` and `rbf` had time-based "non-determinism". `addrman` is fixed in #20425. `process_message` and `process_messages` are left to fix: simply using mock time is not enough for them due to interaction with `IsInitialBlockDownload()`. 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: MarcoFalke: review ACK 8c09c0c practicalswift: > review ACK [8c09c0c](bitcoin/bitcoin@8c09c0c) Tree-SHA512: 32dfbead3dfd18cf4ff56dc2ea341aa977441b4e19a54879cf54fa5820c7e2b14b92c7e238d32fd785654f3b28cc82826ae66c03e94c292633c63c41196ba9a8
2 parents f1f2418 + 8c09c0c commit 7015082

File tree

4 files changed

+4
-1
lines changed

4 files changed

+4
-1
lines changed

src/test/fuzz/banman.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ void initialize()
3232
void test_one_input(const std::vector<uint8_t>& buffer)
3333
{
3434
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
35+
SetMockTime(ConsumeTime(fuzzed_data_provider));
3536
const fs::path banlist_file = GetDataDir() / "fuzzed_banlist.dat";
3637
fs::remove(banlist_file);
3738
{

src/test/fuzz/connman.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ void initialize()
2323
void test_one_input(const std::vector<uint8_t>& buffer)
2424
{
2525
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
26+
SetMockTime(ConsumeTime(fuzzed_data_provider));
2627
CConnman connman{fuzzed_data_provider.ConsumeIntegral<uint64_t>(), fuzzed_data_provider.ConsumeIntegral<uint64_t>(), fuzzed_data_provider.ConsumeBool()};
2728
CAddress random_address;
2829
CNetAddr random_netaddr;

src/test/fuzz/net.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void initialize()
2727
void test_one_input(const std::vector<uint8_t>& buffer)
2828
{
2929
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
30-
30+
SetMockTime(ConsumeTime(fuzzed_data_provider));
3131
const std::optional<CAddress> address = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
3232
if (!address) {
3333
return;

src/test/fuzz/rbf.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
void test_one_input(const std::vector<uint8_t>& buffer)
1919
{
2020
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
21+
SetMockTime(ConsumeTime(fuzzed_data_provider));
2122
std::optional<CMutableTransaction> mtx = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider);
2223
if (!mtx) {
2324
return;

0 commit comments

Comments
 (0)