diff --git a/ext/random/random.c b/ext/random/random.c index 055ebd69a9c16..da23f2df10ee4 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 | (r << (total_size * 8)); 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 | (r << (total_size * 8)); total_size += status->last_generated_size; if (status->last_unsafe) { return 0; @@ -148,7 +148,7 @@ static inline uint64_t rand_range64(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 | (r << (total_size * 8)); total_size += status->last_generated_size; if (status->last_unsafe) { return 0; @@ -183,7 +183,7 @@ static inline uint64_t rand_range64(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 | (r << (total_size * 8)); total_size += status->last_generated_size; if (status->last_unsafe) { return 0; diff --git a/ext/random/tests/03_randomizer/get_int_user.phpt b/ext/random/tests/03_randomizer/get_int_user.phpt index fe0e4492171ce..d6c995314319c 100644 --- a/ext/random/tests/03_randomizer/get_int_user.phpt +++ b/ext/random/tests/03_randomizer/get_int_user.phpt @@ -6,9 +6,11 @@ Random: Randomizer: User Engine results are correctly expanded for getInt() $randomizer = new \Random\Randomizer ( new class () implements \Random\Engine { + public $count = 0; + public function generate(): string { - return "\x01"; + return "\x01\x02\x03\x04\x05\x06\x07\x08"[$this->count++]; } } ); @@ -17,4 +19,4 @@ var_dump(bin2hex(pack('V', $randomizer->getInt(0, 0xFFFFFF)))); ?> --EXPECT-- -string(8) "01010100" +string(8) "01020300"