From: <sv...@op...> - 2024-08-31 11:11:32
|
Author: manx Date: Sat Aug 31 13:11:19 2024 New Revision: 21549 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21549 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. Modified: trunk/OpenMPT/src/mpt/random/engine.hpp Modified: trunk/OpenMPT/src/mpt/random/engine.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/random/engine.hpp Sat Aug 31 08:51:53 2024 (r21548) +++ trunk/OpenMPT/src/mpt/random/engine.hpp Sat Aug 31 13:11:19 2024 (r21549) @@ -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); } |