145
145
#define twist (m ,u ,v ) (m ^ (mixBits(u,v)>>1) ^ ((uint32_t)(-(int32_t)(loBit(v))) & 0x9908b0dfU))
146
146
#define twist_php (m ,u ,v ) (m ^ (mixBits(u,v)>>1) ^ ((uint32_t)(-(int32_t)(loBit(u))) & 0x9908b0dfU))
147
147
148
- #define RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generate_size , rng_unsafe ) \
148
+ #define RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generate_size , engine_unsafe ) \
149
149
do { \
150
150
bool _unsafe = false; \
151
151
RANDOM_ENGINE_GENERATE(algo, state, result, generate_size, &_unsafe); \
152
152
if (_unsafe == true) { \
153
- if (rng_unsafe != NULL) { \
154
- *rng_unsafe = true; \
153
+ if (engine_unsafe != NULL) { \
154
+ *engine_unsafe = true; \
155
155
} \
156
156
return 0; \
157
157
} \
@@ -180,16 +180,16 @@ static zend_object_handlers random_engine_xorshift128plus_object_handlers;
180
180
static zend_object_handlers random_engine_xoshiro256starstar_object_handlers ;
181
181
static zend_object_handlers random_randomizer_object_handlers ;
182
182
183
- static uint32_t rand_range32 (const php_random_engine_algo * algo , void * state , uint32_t umax , bool * rng_unsafe ) {
183
+ static uint32_t rand_range32 (const php_random_engine_algo * algo , void * state , uint32_t umax , bool * engine_unsafe ) {
184
184
uint32_t result , limit ;
185
185
size_t generated_size ;
186
186
187
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , rng_unsafe );
187
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , engine_unsafe );
188
188
while (generated_size < sizeof (uint32_t )) {
189
189
uint32_t ret = 0 ;
190
190
size_t generate_size ;
191
191
192
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , rng_unsafe );
192
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , engine_unsafe );
193
193
result = (result << generate_size ) | ret ;
194
194
195
195
generated_size += generate_size ;
@@ -213,12 +213,12 @@ static uint32_t rand_range32(const php_random_engine_algo *algo, void *state, ui
213
213
214
214
/* Discard numbers over the limit to avoid modulo bias */
215
215
while (UNEXPECTED (result > limit )) {
216
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , rng_unsafe );
216
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , engine_unsafe );
217
217
while (generated_size < sizeof (uint32_t )) {
218
218
uint32_t ret ;
219
219
size_t generate_size ;
220
220
221
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , rng_unsafe );
221
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , engine_unsafe );
222
222
223
223
result = (result << generate_size ) | ret ;
224
224
@@ -230,17 +230,17 @@ static uint32_t rand_range32(const php_random_engine_algo *algo, void *state, ui
230
230
}
231
231
232
232
#if ZEND_ULONG_MAX > UINT32_MAX
233
- static uint64_t rand_range64 (const php_random_engine_algo * algo , void * state , uint64_t umax , bool * rng_unsafe ) {
233
+ static uint64_t rand_range64 (const php_random_engine_algo * algo , void * state , uint64_t umax , bool * engine_unsafe ) {
234
234
uint64_t result , limit ;
235
235
size_t generated_size ;
236
236
237
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , rng_unsafe );
237
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , engine_unsafe );
238
238
239
239
while (generated_size < sizeof (uint64_t )) {
240
240
uint64_t ret = 0 ;
241
241
size_t generate_size = 0 ;
242
242
243
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , rng_unsafe );
243
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , engine_unsafe );
244
244
245
245
result = (result << generate_size ) | ret ;
246
246
@@ -265,13 +265,13 @@ static uint64_t rand_range64(const php_random_engine_algo *algo, void *state, ui
265
265
266
266
/* Discard numbers over the limit to avoid modulo bias */
267
267
while (UNEXPECTED (result > limit )) {
268
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , rng_unsafe );
268
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , result , generated_size , engine_unsafe );
269
269
270
270
while (generated_size < sizeof (uint64_t )) {
271
271
uint64_t ret = 0 ;
272
272
size_t generate_size = 0 ;
273
273
274
- RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , rng_unsafe );
274
+ RANDOM_ENGINE_GENERATE_GUARD (algo , state , ret , generate_size , engine_unsafe );
275
275
276
276
result = (result << generate_size ) | ret ;
277
277
@@ -341,7 +341,7 @@ static inline size_t combinedlcg_dynamic_generate_size(void *state) {
341
341
return sizeof (uint32_t );
342
342
}
343
343
344
- static uint64_t combinedlcg_generate (void * state , bool * rng_unsafe ) {
344
+ static uint64_t combinedlcg_generate (void * state , bool * engine_unsafe ) {
345
345
int32_t q , z ;
346
346
php_random_engine_state_combinedlcg * s = state ;
347
347
@@ -456,7 +456,7 @@ static inline void pcg64_step(php_random_engine_state_pcg64 *s) {
456
456
UINT128_ADD (s -> s , s -> inc , s -> s );
457
457
}
458
458
459
- static uint64_t pcg64_generate (void * state , bool * rng_unsafe ) {
459
+ static uint64_t pcg64_generate (void * state , bool * engine_unsafe ) {
460
460
php_random_engine_state_pcg64 * s = state ;
461
461
uint64_t result ;
462
462
@@ -575,7 +575,7 @@ static inline void mersennetwister_reload(php_random_engine_state_mersennetwiste
575
575
state -> cnt = 0 ;
576
576
}
577
577
578
- static uint64_t mersennetwister_generate (void * state , bool * rng_unsafe ) {
578
+ static uint64_t mersennetwister_generate (void * state , bool * engine_unsafe ) {
579
579
php_random_engine_state_mersennetwister * s = state ;
580
580
uint32_t s1 ;
581
581
@@ -689,11 +689,11 @@ static inline size_t secure_dynamic_generate_size(void *state) {
689
689
return sizeof (uint64_t );
690
690
}
691
691
692
- static uint64_t secure_generate (void * state , bool * rng_unsafe ) {
692
+ static uint64_t secure_generate (void * state , bool * engine_unsafe ) {
693
693
uint64_t ret = 0 ;
694
694
695
- if (php_random_bytes_silent (& ret , sizeof (uint64_t )) == FAILURE && rng_unsafe != NULL ) {
696
- * rng_unsafe = true;
695
+ if (php_random_bytes_silent (& ret , sizeof (uint64_t )) == FAILURE && engine_unsafe != NULL ) {
696
+ * engine_unsafe = true;
697
697
}
698
698
699
699
return ret ;
@@ -723,7 +723,7 @@ static inline size_t user_dynamic_generate_size(void *state) {
723
723
return s -> last_generate_size ;
724
724
}
725
725
726
- static uint64_t user_generate (void * state , bool * rng_unsafe ) {
726
+ static uint64_t user_generate (void * state , bool * engine_unsafe ) {
727
727
php_random_engine_state_user * s = state ;
728
728
uint64_t result = 0 ;
729
729
size_t size ;
@@ -747,8 +747,8 @@ static uint64_t user_generate(void *state, bool *rng_unsafe) {
747
747
result += ((uint64_t ) (unsigned char ) Z_STRVAL (retval )[i ]) << (8 * i );
748
748
}
749
749
} else {
750
- if (rng_unsafe != NULL ) {
751
- * rng_unsafe = true;
750
+ if (engine_unsafe != NULL ) {
751
+ * engine_unsafe = true;
752
752
}
753
753
}
754
754
@@ -775,7 +775,7 @@ static inline size_t xorshift128plus_dynamic_generate_size(void *state) {
775
775
return sizeof (uint64_t );
776
776
}
777
777
778
- static uint64_t xorshift128plus_generate (void * state , bool * rng_unsafe ) {
778
+ static uint64_t xorshift128plus_generate (void * state , bool * engine_unsafe ) {
779
779
php_random_engine_state_xorshift128plus * s = state ;
780
780
uint64_t s0 , s1 , r ;
781
781
@@ -849,7 +849,7 @@ static inline size_t xoshiro256starstar_dynamic_generate_size(void *state) {
849
849
return sizeof (uint64_t );
850
850
}
851
851
852
- static uint64_t xoshiro256starstar_generate (void * state , bool * rng_unsafe ) {
852
+ static uint64_t xoshiro256starstar_generate (void * state , bool * engine_unsafe ) {
853
853
php_random_engine_state_xoshiro256starstar * s = state ;
854
854
const uint64_t result = rotl (s -> s [1 ] * 5 , 7 ) * 9 ;
855
855
const uint64_t t = s -> s [1 ] << 17 ;
@@ -1219,18 +1219,18 @@ PHPAPI void *php_random_engine_get_default_state(void)
1219
1219
/* }}} */
1220
1220
1221
1221
/* {{{ php_random_engine_range */
1222
- PHPAPI zend_long php_random_engine_range (const php_random_engine_algo * algo , void * state , zend_long min , zend_long max , bool * rng_unsafe )
1222
+ PHPAPI zend_long php_random_engine_range (const php_random_engine_algo * algo , void * state , zend_long min , zend_long max , bool * engine_unsafe )
1223
1223
{
1224
1224
zend_ulong umax = max - min ;
1225
1225
1226
1226
#if ZEND_ULONG_MAX > UINT32_MAX
1227
1227
/* user-land OR 64-bit RNG OR umax over 32-bit */
1228
1228
if (algo -> static_generate_size == 0 || algo -> static_generate_size > sizeof (uint32_t ) || umax > UINT32_MAX ) {
1229
- return (zend_long ) rand_range64 (algo , state , umax , rng_unsafe ) + min ;
1229
+ return (zend_long ) rand_range64 (algo , state , umax , engine_unsafe ) + min ;
1230
1230
}
1231
1231
#endif
1232
1232
1233
- return (zend_long ) (rand_range32 (algo , state , umax , rng_unsafe ) + min );
1233
+ return (zend_long ) (rand_range32 (algo , state , umax , engine_unsafe ) + min );
1234
1234
}
1235
1235
/* }}} */
1236
1236
@@ -1422,14 +1422,14 @@ PHP_METHOD(Random_Engine_CombinedLCG, generate)
1422
1422
php_random_engine * engine = Z_RANDOM_ENGINE_P (ZEND_THIS );
1423
1423
uint64_t generated ;
1424
1424
size_t size ;
1425
- bool rng_unsafe = false;
1425
+ bool engine_unsafe = false;
1426
1426
zend_string * bytes ;
1427
1427
int i ;
1428
1428
1429
1429
ZEND_PARSE_PARAMETERS_NONE ();
1430
1430
1431
- RANDOM_ENGINE_GENERATE (engine -> algo , engine -> state , generated , size , & rng_unsafe );
1432
- if (rng_unsafe ) {
1431
+ RANDOM_ENGINE_GENERATE (engine -> algo , engine -> state , generated , size , & engine_unsafe );
1432
+ if (engine_unsafe ) {
1433
1433
zend_throw_exception (spl_ce_RuntimeException , "Random number generate failed" , 0 );
1434
1434
RETURN_THROWS ();
1435
1435
}
@@ -1791,7 +1791,7 @@ PHP_METHOD(Random_Engine_Xoshiro256StarStar, jump)
1791
1791
PHP_METHOD (Random_Engine_Xoshiro256StarStar , jumpLong )
1792
1792
{
1793
1793
php_random_engine * engine = Z_RANDOM_ENGINE_P (ZEND_THIS );
1794
- php_random_engine_state_xoshiro256starstar * s = ( php_random_engine_state_xoshiro256starstar * ) engine -> state ;
1794
+ php_random_engine_state_xoshiro256starstar * s = engine -> state ;
1795
1795
static const uint64_t jmp [] = { 0x76e15d3efefdcbbf , 0xc5004e441c522fb3 , 0x77710069854ee241 , 0x39109bb02acbe635 };
1796
1796
uint64_t s0 = 0 , s1 = 0 , s2 = 0 , s3 = 0 ;
1797
1797
int i , j ;
@@ -1855,12 +1855,12 @@ PHP_METHOD(Random_Randomizer, getInt)
1855
1855
php_random_randomizer * randomizer = Z_RANDOM_RANDOMIZER_P (ZEND_THIS );
1856
1856
zend_long min , max , result ;
1857
1857
int argc = ZEND_NUM_ARGS ();
1858
- bool rng_unsafe = false;
1858
+ bool engine_unsafe = false;
1859
1859
1860
1860
if (argc == 0 ) {
1861
1861
// right shift for compatibility
1862
- result = (zend_long ) randomizer -> algo -> generate (randomizer -> state , & rng_unsafe );
1863
- if (rng_unsafe ) {
1862
+ result = (zend_long ) randomizer -> algo -> generate (randomizer -> state , & engine_unsafe );
1863
+ if (engine_unsafe ) {
1864
1864
zend_throw_exception (spl_ce_RuntimeException , "Random number generate failed" , 0 );
1865
1865
RETURN_THROWS ();
1866
1866
}
@@ -1877,8 +1877,8 @@ PHP_METHOD(Random_Randomizer, getInt)
1877
1877
RETURN_THROWS ();
1878
1878
}
1879
1879
1880
- result = php_random_engine_range (randomizer -> algo , randomizer -> state , min , max , & rng_unsafe );
1881
- if (rng_unsafe ) {
1880
+ result = php_random_engine_range (randomizer -> algo , randomizer -> state , min , max , & engine_unsafe );
1881
+ if (engine_unsafe ) {
1882
1882
zend_throw_exception (spl_ce_RuntimeException , "Random number generate failed" , 0 );
1883
1883
RETURN_THROWS ();
1884
1884
}
@@ -1895,7 +1895,7 @@ PHP_METHOD(Random_Randomizer, getBytes)
1895
1895
zend_long length ;
1896
1896
uint64_t result ;
1897
1897
size_t total_size = 0 , required_size , generated_size ;
1898
- bool rng_unsafe = false;
1898
+ bool engine_unsafe = false;
1899
1899
int i ;
1900
1900
1901
1901
ZEND_PARSE_PARAMETERS_START (1 , 1 )
@@ -1911,8 +1911,9 @@ PHP_METHOD(Random_Randomizer, getBytes)
1911
1911
required_size = length ;
1912
1912
1913
1913
while (total_size < required_size ) {
1914
- RANDOM_ENGINE_GENERATE (randomizer -> algo , randomizer -> state , result , generated_size , & rng_unsafe );
1915
- if (rng_unsafe ) {
1914
+ RANDOM_ENGINE_GENERATE (randomizer -> algo , randomizer -> state , result , generated_size , & engine_unsafe );
1915
+ if (engine_unsafe ) {
1916
+ zend_string_free (retval );
1916
1917
zend_throw_exception (spl_ce_RuntimeException , "Random number generate failed" , 0 );
1917
1918
RETURN_THROWS ();
1918
1919
}
0 commit comments