@@ -575,6 +575,23 @@ static inline void mersennetwister_reload(php_random_engine_state_mersennetwiste
575575 state -> cnt = 0 ;
576576}
577577
578+ static void mersennetwister_seed (void * state , const uint64_t seed ) {
579+ /* Initialize generator state with seed
580+ See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
581+ In previous versions, most significant bits (MSBs) of the seed affect
582+ only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. */
583+ php_random_engine_state_mersennetwister * s = state ;
584+
585+ s -> s [0 ] = seed & 0xffffffffU ;
586+ for (s -> cnt = 1 ; s -> cnt < MT_N ; s -> cnt ++ ) {
587+ s -> s [s -> cnt ] = (1812433253U * (s -> s [s -> cnt - 1 ] ^ (s -> s [s -> cnt - 1 ] >> 30 )) + s -> cnt ) & 0xffffffffU ;
588+ }
589+ mersennetwister_reload (s );
590+
591+ /* Seed only once */
592+ s -> seeded = true;
593+ }
594+
578595static uint64_t mersennetwister_generate (void * state , bool * engine_unsafe ) {
579596 php_random_engine_state_mersennetwister * s = state ;
580597 uint32_t s1 ;
@@ -584,10 +601,9 @@ static uint64_t mersennetwister_generate(void *state, bool *engine_unsafe) {
584601 if (php_random_bytes_silent (& bytes , sizeof (zend_long )) == FAILURE ) {
585602 bytes = GENERATE_SEED ();
586603 }
587- php_mt_srand ( bytes );
604+ mersennetwister_seed ( state , bytes );
588605 }
589606
590-
591607 if (s -> cnt >= MT_N ) {
592608 mersennetwister_reload (s );
593609 }
@@ -599,23 +615,6 @@ static uint64_t mersennetwister_generate(void *state, bool *engine_unsafe) {
599615 return (uint64_t ) (s1 ^ (s1 >> 18 ));
600616}
601617
602- static void mersennetwister_seed (void * state , const uint64_t seed ) {
603- /* Initialize generator state with seed
604- See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
605- In previous versions, most significant bits (MSBs) of the seed affect
606- only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. */
607- php_random_engine_state_mersennetwister * s = state ;
608-
609- s -> s [0 ] = seed & 0xffffffffU ;
610- for (s -> cnt = 1 ; s -> cnt < MT_N ; s -> cnt ++ ) {
611- s -> s [s -> cnt ] = (1812433253U * (s -> s [s -> cnt - 1 ] ^ (s -> s [s -> cnt - 1 ] >> 30 )) + s -> cnt ) & 0xffffffffU ;
612- }
613- mersennetwister_reload (s );
614-
615- /* Seed only once */
616- s -> seeded = true;
617- }
618-
619618static int mersennetwister_serialize (void * state , HashTable * data ) {
620619 php_random_engine_state_mersennetwister * s = state ;
621620 zval tmp ;
@@ -1761,7 +1760,7 @@ PHP_METHOD(Random_Engine_Xoshiro256StarStar, __construct)
17611760PHP_METHOD (Random_Engine_Xoshiro256StarStar , jump )
17621761{
17631762 php_random_engine * engine = Z_RANDOM_ENGINE_P (ZEND_THIS );
1764- php_random_engine_state_xoshiro256starstar * s = ( php_random_engine_state_xoshiro256starstar * ) engine -> state ;
1763+ php_random_engine_state_xoshiro256starstar * s = engine -> state ;
17651764 static const uint64_t jmp [] = { 0x180ec6d33cfd0aba , 0xd5a61266f0c9392c , 0xa9582618e03fc9aa , 0x39abdc4529b1661c };
17661765 uint64_t s0 = 0 , s1 = 0 , s2 = 0 , s3 = 0 ;
17671766 int i , j ;
0 commit comments