@@ -160,7 +160,6 @@ static uint32_t rand_range32(const php_random_engine_algo *algo, void *state, ui
160
160
size_t generated_size ;
161
161
162
162
RANDOM_ENGINE_GENERATE_SIZE (algo , state , result , generated_size );
163
-
164
163
while (generated_size < sizeof (uint32_t )) {
165
164
uint32_t ret ;
166
165
size_t generate_size ;
@@ -624,6 +623,7 @@ static uint64_t user_generate(void *state) {
624
623
size_t size ;
625
624
zval retval ;
626
625
int i ;
626
+ char * ptr ;
627
627
628
628
zend_call_known_instance_method_with_0_params (s -> generate_method , s -> object , & retval );
629
629
@@ -632,7 +632,7 @@ static uint64_t user_generate(void *state) {
632
632
s -> last_generate_size = size ;
633
633
634
634
/* Endianness safe copy */
635
- char * ptr = (char * ) & result ;
635
+ ptr = (char * ) & result ;
636
636
for (i = 0 ; i < size ; i ++ ) {
637
637
ptr [i ] = Z_STR (retval )-> val [i ];
638
638
}
@@ -1213,7 +1213,7 @@ PHP_METHOD(Random_Engine_XorShift128Plus, generate)
1213
1213
1214
1214
/* Endianness safe copy */
1215
1215
for (i = 0 ; i < size ; i ++ ) {
1216
- bytes -> val [i ] = (generated >> (i * 8 )) & 0xff ;
1216
+ ZSTR_VAL ( bytes ) [i ] = (generated >> (i * 8 )) & 0xff ;
1217
1217
}
1218
1218
1219
1219
ZSTR_VAL (bytes )[size ] = '\0' ;
@@ -1416,11 +1416,9 @@ PHP_METHOD(Random_Randomizer, getInt)
1416
1416
PHP_METHOD (Random_Randomizer , getBytes )
1417
1417
{
1418
1418
php_random_randomizer * randomizer = Z_RANDOM_RANDOMIZER_P (ZEND_THIS );
1419
- zend_string * ret ;
1419
+ zend_string * retval ;
1420
1420
zend_long length ;
1421
- uint64_t buf ;
1422
- char * bytes ;
1423
- size_t generated_bytes = 0 ;
1421
+ size_t generated_size = 0 ;
1424
1422
int i ;
1425
1423
1426
1424
ZEND_PARSE_PARAMETERS_START (1 , 1 )
@@ -1432,31 +1430,22 @@ PHP_METHOD(Random_Randomizer, getBytes)
1432
1430
RETURN_THROWS ();
1433
1431
}
1434
1432
1435
- ret = zend_string_alloc (length , 0 );
1433
+ retval = zend_string_alloc (length , 0 );
1436
1434
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 ;
1443
1438
1444
- buf = ( buf << generate_size ) | randomizer -> algo -> generate ( randomizer -> state );
1439
+ RANDOM_ENGINE_GENERATE_SIZE ( randomizer -> algo , randomizer -> state , generated , generate_size );
1445
1440
1446
- generated_size += generate_size ;
1441
+ for (i = 0 ; i < generate_size ; i ++ ) {
1442
+ ZSTR_VAL (retval )[i ] = (generated >> (i * 8 )) & 0xff ;
1447
1443
}
1448
1444
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 ;
1459
1446
}
1447
+ ZSTR_VAL (retval )[length ] = '\0' ;
1448
+ RETURN_STR (retval );
1460
1449
}
1461
1450
/* }}} */
1462
1451
0 commit comments