Introduce `g_fuzzing` global for fuzzing checks

pull/31093/head
dergoegge 3 weeks ago
parent b95adf057a
commit 9f243cd7fa

@ -240,11 +240,6 @@ if(BUILD_FOR_FUZZING)
set(BUILD_GUI_TESTS OFF) set(BUILD_GUI_TESTS OFF)
set(BUILD_BENCH OFF) set(BUILD_BENCH OFF)
set(BUILD_FUZZ_BINARY ON) set(BUILD_FUZZ_BINARY ON)
target_compile_definitions(core_interface INTERFACE
ABORT_ON_FAILED_ASSUME
FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
)
endif() endif()
include(ProcessConfigurations) include(ProcessConfigurations)

@ -9,6 +9,7 @@
#include <chain.h> #include <chain.h>
#include <primitives/block.h> #include <primitives/block.h>
#include <uint256.h> #include <uint256.h>
#include <util/check.h>
unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
{ {
@ -138,11 +139,8 @@ bool PermittedDifficultyTransition(const Consensus::Params& params, int64_t heig
// the most signficant bit of the last byte of the hash is set. // the most signficant bit of the last byte of the hash is set.
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params& params) bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params& params)
{ {
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION if (g_fuzzing) return (hash.data()[31] & 0x80) == 0;
return (hash.data()[31] & 0x80) == 0;
#else
return CheckProofOfWorkImpl(hash, nBits, params); return CheckProofOfWorkImpl(hash, nBits, params);
#endif
} }
bool CheckProofOfWorkImpl(uint256 hash, unsigned int nBits, const Consensus::Params& params) bool CheckProofOfWorkImpl(uint256 hash, unsigned int nBits, const Consensus::Params& params)

@ -102,6 +102,8 @@ void ResetCoverageCounters() {}
void initialize() void initialize()
{ {
g_fuzzing = true;
// By default, make the RNG deterministic with a fixed seed. This will affect all // By default, make the RNG deterministic with a fixed seed. This will affect all
// randomness during the fuzz test, except: // randomness during the fuzz test, except:
// - GetStrongRandBytes(), which is used for the creation of private key material. // - GetStrongRandBytes(), which is used for the creation of private key material.

@ -14,6 +14,8 @@
#include <string> #include <string>
#include <string_view> #include <string_view>
bool g_fuzzing = false;
std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func) std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func)
{ {
return strprintf("Internal bug detected: %s\n%s:%d (%s)\n" return strprintf("Internal bug detected: %s\n%s:%d (%s)\n"

@ -13,6 +13,8 @@
#include <string_view> #include <string_view>
#include <utility> #include <utility>
extern bool g_fuzzing;
std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func); std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func);
class NonFatalCheckError : public std::runtime_error class NonFatalCheckError : public std::runtime_error
@ -42,7 +44,7 @@ void assertion_fail(std::string_view file, int line, std::string_view func, std:
template <bool IS_ASSERT, typename T> template <bool IS_ASSERT, typename T>
constexpr T&& inline_assertion_check(LIFETIMEBOUND T&& val, [[maybe_unused]] const char* file, [[maybe_unused]] int line, [[maybe_unused]] const char* func, [[maybe_unused]] const char* assertion) constexpr T&& inline_assertion_check(LIFETIMEBOUND T&& val, [[maybe_unused]] const char* file, [[maybe_unused]] int line, [[maybe_unused]] const char* func, [[maybe_unused]] const char* assertion)
{ {
if (IS_ASSERT || std::is_constant_evaluated() if (IS_ASSERT || std::is_constant_evaluated() || g_fuzzing
#ifdef ABORT_ON_FAILED_ASSUME #ifdef ABORT_ON_FAILED_ASSUME
|| true || true
#endif #endif

Loading…
Cancel
Save