Make G_FUZZING constexpr, require -DBUILD_FOR_FUZZING=ON to execute a fuzz target

This commit is contained in:
MarcoFalke 2024-10-31 13:53:48 +01:00
parent fae3cf0ffa
commit fafbf8acf4
No known key found for this signature in database
5 changed files with 17 additions and 7 deletions

View file

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

View file

@ -139,7 +139,7 @@ bool PermittedDifficultyTransition(const Consensus::Params& params, int64_t heig
// the most signficant bit of the last byte of the hash is set.
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params& params)
{
if (g_fuzzing) return (hash.data()[31] & 0x80) == 0;
if constexpr (G_FUZZING) return (hash.data()[31] & 0x80) == 0;
return CheckProofOfWorkImpl(hash, nBits, params);
}

View file

@ -102,8 +102,6 @@ void ResetCoverageCounters() {}
void initialize()
{
g_fuzzing = true;
// By default, make the RNG deterministic with a fixed seed. This will affect all
// randomness during the fuzz test, except:
// - GetStrongRandBytes(), which is used for the creation of private key material.
@ -156,6 +154,10 @@ void initialize()
std::cerr << "No fuzz target compiled for " << g_fuzz_target << "." << std::endl;
std::exit(EXIT_FAILURE);
}
if constexpr (!G_FUZZING) {
std::cerr << "Must compile with -DBUILD_FOR_FUZZING=ON to execute a fuzz target." << std::endl;
std::exit(EXIT_FAILURE);
}
Assert(!g_test_one_input);
g_test_one_input = &it->second.test_one_input;
it->second.opts.init();

View file

@ -14,8 +14,6 @@
#include <string>
#include <string_view>
bool g_fuzzing = false;
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"

View file

@ -13,7 +13,13 @@
#include <string_view>
#include <utility>
extern bool g_fuzzing;
constexpr bool G_FUZZING{
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
true
#else
false
#endif
};
std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func);
@ -44,7 +50,7 @@ void assertion_fail(std::string_view file, int line, std::string_view func, std:
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)
{
if (IS_ASSERT || std::is_constant_evaluated() || g_fuzzing
if (IS_ASSERT || std::is_constant_evaluated() || G_FUZZING
#ifdef ABORT_ON_FAILED_ASSUME
|| true
#endif