From: <sv...@op...> - 2024-08-31 11:18:48
|
Author: manx Date: Sat Aug 31 13:18:41 2024 New Revision: 21552 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21552 Log: [Fix] mpt/random/engine.hpp: The size calculation for the required seed_seq was wrong, resulting in way too much entropy to get requested. Backported from r21549. Modified: branches/OpenMPT-1.29/common/mptRandom.h Modified: branches/OpenMPT-1.29/common/mptRandom.h ============================================================================== --- branches/OpenMPT-1.29/common/mptRandom.h Sat Aug 31 13:12:35 2024 (r21551) +++ branches/OpenMPT-1.29/common/mptRandom.h Sat Aug 31 13:18:41 2024 (r21552) @@ -514,7 +514,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return rng_type::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - std::unique_ptr<mpt::seed_seq_values<seed_bits / sizeof(unsigned int)>> values = std::make_unique<mpt::seed_seq_values<seed_bits / sizeof(unsigned int)>>(rd); + std::unique_ptr<mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)>> values = std::make_unique<mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)>>(rd); std::seed_seq seed(values->begin(), values->end()); return rng_type(seed); } @@ -527,7 +527,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return rng_type::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - std::unique_ptr<mpt::seed_seq_values<seed_bits / sizeof(unsigned int)>> values = std::make_unique<mpt::seed_seq_values<seed_bits / sizeof(unsigned int)>>(rd); + std::unique_ptr<mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)>> values = std::make_unique<mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)>>(rd); std::seed_seq seed(values->begin(), values->end()); return rng_type(seed); } @@ -540,7 +540,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return rng_type::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - mpt::seed_seq_values<seed_bits / sizeof(unsigned int)> values(rd); + mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -553,7 +553,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return rng_type::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - mpt::seed_seq_values<seed_bits / sizeof(unsigned int)> values(rd); + mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -566,7 +566,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return std::ranlux24_base::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - mpt::seed_seq_values<seed_bits / sizeof(unsigned int)> values(rd); + mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -579,7 +579,7 @@ static MPT_CONSTEXPR11_FUN int result_bits() { return std::ranlux48_base::word_size; } template<typename Trd> static inline rng_type make(Trd & rd) { - mpt::seed_seq_values<seed_bits / sizeof(unsigned int)> values(rd); + mpt::seed_seq_values<(seed_bits + ((sizeof(unsigned int) * 8) - 1)) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } |