mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
Merge bitcoin/bitcoin#31093: Introduce g_fuzzing
global for fuzzing checks
9f243cd7fa
Introduce `g_fuzzing` global for fuzzing checks (dergoegge) Pull request description: This PR introduces a global `g_fuzzing` that indicates if we are fuzzing. If `g_fuzzing` is `true` then: * Assume checks are enabled * Special fuzzing paths are taken (e.g. pow check is reduced to one bit) Closes #30950 #31057 ACKs for top commit: maflcko: review ACK9f243cd7fa
🗜 brunoerg: crACK9f243cd7fa
marcofleon: Tested ACK9f243cd7fa
Tree-SHA512: 56e4cad0555dec0c565ea5ecc529628ee4f37d20dc660c647fdc6948fbeed8291e6fe290de514bd4c2c7089654d9ce1add607dc9855462828b62be9ee45e4999
This commit is contained in:
commit
1c7ca6e64d
5 changed files with 9 additions and 10 deletions
|
@ -234,11 +234,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…
Add table
Reference in a new issue