diff --git a/ext/random/random.c b/ext/random/random.c index 45a294195b211..7844a684ceb75 100644 --- a/ext/random/random.c +++ b/ext/random/random.c @@ -92,7 +92,7 @@ static inline uint32_t rand_range32(const php_random_algo *algo, php_random_stat total_size = 0; do { r = algo->generate(status); - result = (result << (8 * status->last_generated_size)) | r; + result = (result << (8 * (status->last_generated_size % sizeof(result)))) | r; total_size += status->last_generated_size; if (status->last_unsafe) { return 0; @@ -127,7 +127,7 @@ static inline uint32_t rand_range32(const php_random_algo *algo, php_random_stat total_size = 0; do { r = algo->generate(status); - result = (result << (8 * status->last_generated_size)) | r; + result = (result << (8 * (status->last_generated_size % sizeof(result)))) | r; total_size += status->last_generated_size; if (status->last_unsafe) { return 0;