From: <sv...@op...> - 2024-08-31 11:12:47
|
Author: manx Date: Sat Aug 31 13:12:35 2024 New Revision: 21551 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21551 Log: Merged revision(s) 21549 from trunk/OpenMPT: [Fix] mpt/random/engine.hpp: The size calculation for the required seed_seq was wrong, resulting in way too much entropy to get requested. ........ Modified: branches/OpenMPT-1.30/ (props changed) branches/OpenMPT-1.30/src/mpt/random/engine.hpp Modified: branches/OpenMPT-1.30/src/mpt/random/engine.hpp ============================================================================== --- branches/OpenMPT-1.30/src/mpt/random/engine.hpp Sat Aug 31 13:11:45 2024 (r21550) +++ branches/OpenMPT-1.30/src/mpt/random/engine.hpp Sat Aug 31 13:12:35 2024 (r21551) @@ -7,6 +7,7 @@ #include "mpt/base/macros.hpp" #include "mpt/base/namespace.hpp" +#include "mpt/base/numeric.hpp" #include "mpt/random/seed.hpp" #include <memory> @@ -47,7 +48,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)>> values = std::make_unique<mpt::seed_seq_values<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)>>(rd); std::seed_seq seed(values->begin(), values->end()); return rng_type(seed); } @@ -65,7 +66,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)>> values = std::make_unique<mpt::seed_seq_values<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)>>(rd); std::seed_seq seed(values->begin(), values->end()); return rng_type(seed); } @@ -83,7 +84,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -101,7 +102,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -119,7 +120,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } @@ -137,7 +138,7 @@ } 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<mpt::align_up<std::size_t>(seed_bits, sizeof(unsigned int) * 8) / (sizeof(unsigned int) * 8)> values(rd); std::seed_seq seed(values.begin(), values.end()); return rng_type(seed); } |