@@ -160,7 +160,6 @@ static uint32_t rand_range32(const php_random_engine_algo *algo, void *state, ui
160160 size_t generated_size ;
161161
162162 RANDOM_ENGINE_GENERATE_SIZE (algo , state , result , generated_size );
163-
164163 while (generated_size < sizeof (uint32_t )) {
165164 uint32_t ret ;
166165 size_t generate_size ;
@@ -624,6 +623,7 @@ static uint64_t user_generate(void *state) {
624623 size_t size ;
625624 zval retval ;
626625 int i ;
626+ char * ptr ;
627627
628628 zend_call_known_instance_method_with_0_params (s -> generate_method , s -> object , & retval );
629629
@@ -632,7 +632,7 @@ static uint64_t user_generate(void *state) {
632632 s -> last_generate_size = size ;
633633
634634 /* Endianness safe copy */
635- char * ptr = (char * ) & result ;
635+ ptr = (char * ) & result ;
636636 for (i = 0 ; i < size ; i ++ ) {
637637 ptr [i ] = Z_STR (retval )-> val [i ];
638638 }
@@ -1213,7 +1213,7 @@ PHP_METHOD(Random_Engine_XorShift128Plus, generate)
12131213
12141214 /* Endianness safe copy */
12151215 for (i = 0 ; i < size ; i ++ ) {
1216- bytes -> val [i ] = (generated >> (i * 8 )) & 0xff ;
1216+ ZSTR_VAL ( bytes ) [i ] = (generated >> (i * 8 )) & 0xff ;
12171217 }
12181218
12191219 ZSTR_VAL (bytes )[size ] = '\0' ;
@@ -1416,11 +1416,9 @@ PHP_METHOD(Random_Randomizer, getInt)
14161416PHP_METHOD (Random_Randomizer , getBytes )
14171417{
14181418 php_random_randomizer * randomizer = Z_RANDOM_RANDOMIZER_P (ZEND_THIS );
1419- zend_string * ret ;
1419+ zend_string * retval ;
14201420 zend_long length ;
1421- uint64_t buf ;
1422- char * bytes ;
1423- size_t generated_bytes = 0 ;
1421+ size_t generated_size = 0 ;
14241422 int i ;
14251423
14261424 ZEND_PARSE_PARAMETERS_START (1 , 1 )
@@ -1432,31 +1430,22 @@ PHP_METHOD(Random_Randomizer, getBytes)
14321430 RETURN_THROWS ();
14331431 }
14341432
1435- ret = zend_string_alloc (length , 0 );
1433+ retval = zend_string_alloc (length , 0 );
14361434
1437- while (generated_bytes <= length ) {
1438- size_t generated_size = randomizer -> algo -> dynamic_generate_size (randomizer -> state );
1439-
1440- buf = randomizer -> algo -> generate (randomizer -> state );
1441- while (generated_size < sizeof (uint64_t )) {
1442- size_t generate_size = randomizer -> algo -> dynamic_generate_size (randomizer -> state );
1435+ while (generated_size < (length * sizeof (char ))) {
1436+ uint64_t generated ;
1437+ size_t generate_size ;
14431438
1444- buf = ( buf << generate_size ) | randomizer -> algo -> generate ( randomizer -> state );
1439+ RANDOM_ENGINE_GENERATE_SIZE ( randomizer -> algo , randomizer -> state , generated , generate_size );
14451440
1446- generated_size += generate_size ;
1441+ for (i = 0 ; i < generate_size ; i ++ ) {
1442+ ZSTR_VAL (retval )[i ] = (generated >> (i * 8 )) & 0xff ;
14471443 }
14481444
1449- bytes = (char * ) & buf ;
1450- for (i = 0 ; i < (sizeof (uint64_t ) / sizeof (char )); i ++ ) {
1451- ZSTR_VAL (ret )[generated_bytes + i ] = bytes [i ];
1452-
1453- if ((generated_bytes + i ) >= length ) {
1454- ZSTR_VAL (ret )[length ] = '\0' ;
1455- RETURN_STR (ret );
1456- }
1457- }
1458- generated_bytes += (sizeof (uint64_t ) / sizeof (char ));
1445+ generated_size += generate_size ;
14591446 }
1447+ ZSTR_VAL (retval )[length ] = '\0' ;
1448+ RETURN_STR (retval );
14601449}
14611450/* }}} */
14621451
0 commit comments