From: <sv...@op...> - 2024-08-31 11:20:13
|
Author: manx Date: Sat Aug 31 13:20:01 2024 New Revision: 21553 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21553 Log: Merged revision(s) 21552 from branches/OpenMPT-1.29: [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.28/ (props changed) branches/OpenMPT-1.28/common/mptRandom.h Modified: branches/OpenMPT-1.28/common/mptRandom.h ============================================================================== --- branches/OpenMPT-1.28/common/mptRandom.h Sat Aug 31 13:18:41 2024 (r21552) +++ branches/OpenMPT-1.28/common/mptRandom.h Sat Aug 31 13:20:01 2024 (r21553) @@ -411,7 +411,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 = mpt::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 = mpt::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); } @@ -424,7 +424,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 = mpt::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 = mpt::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); } @@ -437,7 +437,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); } @@ -450,7 +450,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); } @@ -463,7 +463,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); } @@ -476,7 +476,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); } |