From: <sv...@op...> - 2024-05-10 13:39:24
|
Author: manx Date: Fri May 10 15:39:12 2024 New Revision: 20750 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20750 Log: [Imp] mptRandom: Add reinit_global_random() function for fuzzer builds to allow deterministic consecutive fuzzer runs in the same process. Modified: trunk/OpenMPT/common/mptRandom.cpp trunk/OpenMPT/common/mptRandom.h Modified: trunk/OpenMPT/common/mptRandom.cpp ============================================================================== --- trunk/OpenMPT/common/mptRandom.cpp Fri May 10 15:32:21 2024 (r20749) +++ trunk/OpenMPT/common/mptRandom.cpp Fri May 10 15:39:12 2024 (r20750) @@ -69,6 +69,16 @@ return g_global_prng; } +#ifdef MPT_BUILD_FUZZER +void reinit_global_random() +{ + global_prng().~thread_safe_prng<mpt::default_prng>(); + global_random_device().~random_device(); + new(&global_random_device()) mpt::random_device{}; + new(&global_prng()) thread_safe_prng<mpt::default_prng>{global_random_device()}; +} +#endif // MPT_BUILD_FUZZER + #endif // MODPLUG_TRACKER && !MPT_BUILD_WINESUPPORT } // namespace mpt Modified: trunk/OpenMPT/common/mptRandom.h ============================================================================== --- trunk/OpenMPT/common/mptRandom.h Fri May 10 15:32:21 2024 (r20749) +++ trunk/OpenMPT/common/mptRandom.h Fri May 10 15:39:12 2024 (r20750) @@ -128,6 +128,10 @@ mpt::random_device & global_random_device(); mpt::thread_safe_prng<mpt::default_prng> & global_prng(); +#ifdef MPT_BUILD_FUZZER +void reinit_global_random(); +#endif // MPT_BUILD_FUZZER + #if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) void set_global_random_device(mpt::random_device *rd); void set_global_prng(mpt::thread_safe_prng<mpt::default_prng> *rng); |