fuzz: DisableNextWrite

This is required in the process_message(s) fuzz targets to avoid leaking
the next write time from one run to the next. Also, disable it
completely because it is not needed and due to leveldb-internal
non-determinism.
This commit is contained in:
MarcoFalke
2025-06-27 17:22:17 +02:00
parent aeeeeec9f7
commit fa9a3de09b
5 changed files with 14 additions and 1 deletions

View File

@@ -65,6 +65,7 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
auto& chainman = static_cast<TestChainstateManager&>(*g_setup->m_node.chainman);
SetMockTime(1610000000); // any time to successfully reset ibd
chainman.ResetIbd();
chainman.DisableNextWrite();
node::Warnings warnings{};
NetGroupManager netgroupman{{}};

View File

@@ -55,6 +55,7 @@ FUZZ_TARGET(process_messages, .init = initialize_process_messages)
auto& chainman = static_cast<TestChainstateManager&>(*g_setup->m_node.chainman);
SetMockTime(1610000000); // any time to successfully reset ibd
chainman.ResetIbd();
chainman.DisableNextWrite();
node::Warnings warnings{};
NetGroupManager netgroupman{{}};

View File

@@ -9,6 +9,15 @@
#include <validation.h>
#include <validationinterface.h>
void TestChainstateManager::DisableNextWrite()
{
struct TestChainstate : public Chainstate {
void ResetNextWrite() { m_next_write = NodeClock::time_point::max() - 1s; }
};
for (auto* cs : GetAll()) {
static_cast<TestChainstate*>(cs)->ResetNextWrite();
}
}
void TestChainstateManager::ResetIbd()
{
m_cached_finished_ibd = false;

View File

@@ -10,6 +10,8 @@
class CValidationInterface;
struct TestChainstateManager : public ChainstateManager {
/** Disable the next write of all chainstates */
void DisableNextWrite();
/** Reset the ibd cache to its initial state */
void ResetIbd();
/** Toggle IsInitialBlockDownload from true to false */

View File

@@ -785,7 +785,7 @@ public:
return m_mempool ? &m_mempool->cs : nullptr;
}
private:
protected:
bool ActivateBestChainStep(BlockValidationState& state, CBlockIndex* pindexMostWork, const std::shared_ptr<const CBlock>& pblock, bool& fInvalidFound, ConnectTrace& connectTrace) EXCLUSIVE_LOCKS_REQUIRED(cs_main, m_mempool->cs);
bool ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, const std::shared_ptr<const CBlock>& pblock, ConnectTrace& connectTrace, DisconnectedBlockTransactions& disconnectpool) EXCLUSIVE_LOCKS_REQUIRED(cs_main, m_mempool->cs);