mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
Merge #20437: fuzz: Avoid time-based "non-determinism" in fuzzing harnesses by using mocked GetTime()
8c09c0c1d18885ef94f79b3f2d073f43269bc95d 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 8c09c0c1d18885ef94f79b3f2d073f43269bc95d
practicalswift:
> review ACK [8c09c0c](8c09c0c1d1
)
Tree-SHA512: 32dfbead3dfd18cf4ff56dc2ea341aa977441b4e19a54879cf54fa5820c7e2b14b92c7e238d32fd785654f3b28cc82826ae66c03e94c292633c63c41196ba9a8
This commit is contained in:
parent
4cf7374c04
commit
31875f5d2d
@ -36,6 +36,7 @@ FUZZ_TARGET_INIT(banman, initialize_banman)
|
|||||||
// complexity of the input size).
|
// complexity of the input size).
|
||||||
int limit_max_ops{300};
|
int limit_max_ops{300};
|
||||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||||
|
SetMockTime(ConsumeTime(fuzzed_data_provider));
|
||||||
const fs::path banlist_file = GetDataDir() / "fuzzed_banlist.dat";
|
const fs::path banlist_file = GetDataDir() / "fuzzed_banlist.dat";
|
||||||
fs::remove(banlist_file);
|
fs::remove(banlist_file);
|
||||||
{
|
{
|
||||||
|
@ -23,6 +23,7 @@ void initialize_connman()
|
|||||||
FUZZ_TARGET_INIT(connman, initialize_connman)
|
FUZZ_TARGET_INIT(connman, initialize_connman)
|
||||||
{
|
{
|
||||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||||
|
SetMockTime(ConsumeTime(fuzzed_data_provider));
|
||||||
CAddrMan addrman;
|
CAddrMan addrman;
|
||||||
CConnman connman{fuzzed_data_provider.ConsumeIntegral<uint64_t>(), fuzzed_data_provider.ConsumeIntegral<uint64_t>(), addrman};
|
CConnman connman{fuzzed_data_provider.ConsumeIntegral<uint64_t>(), fuzzed_data_provider.ConsumeIntegral<uint64_t>(), addrman};
|
||||||
CNetAddr random_netaddr;
|
CNetAddr random_netaddr;
|
||||||
|
@ -30,6 +30,7 @@ FUZZ_TARGET_INIT(net, initialize_net)
|
|||||||
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
|
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
|
||||||
|
|
||||||
CNode node{ConsumeNode(fuzzed_data_provider)};
|
CNode node{ConsumeNode(fuzzed_data_provider)};
|
||||||
|
SetMockTime(ConsumeTime(fuzzed_data_provider));
|
||||||
while (fuzzed_data_provider.ConsumeBool()) {
|
while (fuzzed_data_provider.ConsumeBool()) {
|
||||||
CallOneOf(
|
CallOneOf(
|
||||||
fuzzed_data_provider,
|
fuzzed_data_provider,
|
||||||
|
Loading…
Reference in New Issue
Block a user