random: Adjust status to state (#13521)

* random: Rename `status` local to `state`

* random: Rename `php_random_algo_with_state`'s `status` member to `state`
This commit is contained in:
Tim Düsterhus 2024-02-26 20:38:45 +01:00 committed by GitHub
parent ddcf5d75b5
commit dce6ed3199
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 99 additions and 99 deletions

View file

@ -32,17 +32,17 @@
*/ */
#define MODMULT(a, b, c, m, s) q = s / a; s = b * (s - a * q) - c * q; if (s < 0) s += m #define MODMULT(a, b, c, m, s) q = s / a; s = b * (s - a * q) - c * q; if (s < 0) s += m
static void seed(void *status, uint64_t seed) static void seed(void *state, uint64_t seed)
{ {
php_random_status_state_combinedlcg *s = status; php_random_status_state_combinedlcg *s = state;
s->state[0] = seed & 0xffffffffU; s->state[0] = seed & 0xffffffffU;
s->state[1] = seed >> 32; s->state[1] = seed >> 32;
} }
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
php_random_status_state_combinedlcg *s = status; php_random_status_state_combinedlcg *s = state;
int32_t q, z; int32_t q, z;
MODMULT(53668, 40014, 12211, 2147483563L, s->state[0]); MODMULT(53668, 40014, 12211, 2147483563L, s->state[0]);
@ -59,17 +59,17 @@ static php_random_result generate(void *status)
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
return php_random_range((php_random_algo_with_state){ return php_random_range((php_random_algo_with_state){
.algo = &php_random_algo_combinedlcg, .algo = &php_random_algo_combinedlcg,
.status = status, .state = state,
}, min, max); }, min, max);
} }
static bool serialize(void *status, HashTable *data) static bool serialize(void *state, HashTable *data)
{ {
php_random_status_state_combinedlcg *s = status; php_random_status_state_combinedlcg *s = state;
zval t; zval t;
for (uint32_t i = 0; i < 2; i++) { for (uint32_t i = 0; i < 2; i++) {
@ -80,9 +80,9 @@ static bool serialize(void *status, HashTable *data)
return true; return true;
} }
static bool unserialize(void *status, HashTable *data) static bool unserialize(void *state, HashTable *data)
{ {
php_random_status_state_combinedlcg *s = status; php_random_status_state_combinedlcg *s = state;
zval *t; zval *t;
for (uint32_t i = 0; i < 2; i++) { for (uint32_t i = 0; i < 2; i++) {

View file

@ -139,14 +139,14 @@ static inline void mt19937_seed_state(php_random_status_state_mt19937 *state, ui
mt19937_reload(state); mt19937_reload(state);
} }
static void seed(void *status, uint64_t seed) static void seed(void *state, uint64_t seed)
{ {
mt19937_seed_state(status, seed); mt19937_seed_state(state, seed);
} }
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
php_random_status_state_mt19937 *s = status; php_random_status_state_mt19937 *s = state;
uint32_t s1; uint32_t s1;
if (s->count >= MT_N) { if (s->count >= MT_N) {
@ -164,17 +164,17 @@ static php_random_result generate(void *status)
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
return php_random_range((php_random_algo_with_state){ return php_random_range((php_random_algo_with_state){
.algo = &php_random_algo_mt19937, .algo = &php_random_algo_mt19937,
.status = status, .state = state,
}, min, max); }, min, max);
} }
static bool serialize(void *status, HashTable *data) static bool serialize(void *state, HashTable *data)
{ {
php_random_status_state_mt19937 *s = status; php_random_status_state_mt19937 *s = state;
zval t; zval t;
for (uint32_t i = 0; i < MT_N; i++) { for (uint32_t i = 0; i < MT_N; i++) {
@ -189,9 +189,9 @@ static bool serialize(void *status, HashTable *data)
return true; return true;
} }
static bool unserialize(void *status, HashTable *data) static bool unserialize(void *state, HashTable *data)
{ {
php_random_status_state_mt19937 *s = status; php_random_status_state_mt19937 *s = state;
zval *t; zval *t;
/* Verify the expected number of elements, this implicitly ensures that no additional elements are present. */ /* Verify the expected number of elements, this implicitly ensures that no additional elements are present. */
@ -255,7 +255,7 @@ PHPAPI void php_random_mt19937_seed_default(php_random_status_state_mt19937 *sta
PHP_METHOD(Random_Engine_Mt19937, __construct) PHP_METHOD(Random_Engine_Mt19937, __construct)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_mt19937 *state = engine.status; php_random_status_state_mt19937 *state = engine.state;
zend_long seed, mode = MT_RAND_MT19937; zend_long seed, mode = MT_RAND_MT19937;
bool seed_is_null = true; bool seed_is_null = true;
@ -298,7 +298,7 @@ PHP_METHOD(Random_Engine_Mt19937, generate)
ZEND_PARSE_PARAMETERS_NONE(); ZEND_PARSE_PARAMETERS_NONE();
php_random_result generated = engine.algo->generate(engine.status); php_random_result generated = engine.algo->generate(engine.state);
if (EG(exception)) { if (EG(exception)) {
RETURN_THROWS(); RETURN_THROWS();
} }
@ -332,7 +332,7 @@ PHP_METHOD(Random_Engine_Mt19937, __serialize)
/* state */ /* state */
array_init(&t); array_init(&t);
if (!engine->engine.algo->serialize(engine->engine.status, Z_ARRVAL(t))) { if (!engine->engine.algo->serialize(engine->engine.state, Z_ARRVAL(t))) {
zend_throw_exception(NULL, "Engine serialize failed", 0); zend_throw_exception(NULL, "Engine serialize failed", 0);
RETURN_THROWS(); RETURN_THROWS();
} }
@ -375,7 +375,7 @@ PHP_METHOD(Random_Engine_Mt19937, __unserialize)
zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name)); zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name));
RETURN_THROWS(); RETURN_THROWS();
} }
if (!engine->engine.algo->unserialize(engine->engine.status, Z_ARRVAL_P(t))) { if (!engine->engine.algo->unserialize(engine->engine.state, Z_ARRVAL_P(t))) {
zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name)); zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name));
RETURN_THROWS(); RETURN_THROWS();
} }
@ -397,7 +397,7 @@ PHP_METHOD(Random_Engine_Mt19937, __debugInfo)
if (engine->engine.algo->serialize) { if (engine->engine.algo->serialize) {
array_init(&t); array_init(&t);
if (!engine->engine.algo->serialize(engine->engine.status, Z_ARRVAL(t))) { if (!engine->engine.algo->serialize(engine->engine.state, Z_ARRVAL(t))) {
zend_throw_exception(NULL, "Engine serialize failed", 0); zend_throw_exception(NULL, "Engine serialize failed", 0);
RETURN_THROWS(); RETURN_THROWS();
} }

View file

@ -43,14 +43,14 @@ static inline void seed128(php_random_status_state_pcgoneseq128xslrr64 *s, php_r
step(s); step(s);
} }
static void seed(void *status, uint64_t seed) static void seed(void *state, uint64_t seed)
{ {
seed128(status, php_random_uint128_constant(0ULL, seed)); seed128(state, php_random_uint128_constant(0ULL, seed));
} }
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
php_random_status_state_pcgoneseq128xslrr64 *s = status; php_random_status_state_pcgoneseq128xslrr64 *s = state;
step(s); step(s);
@ -60,17 +60,17 @@ static php_random_result generate(void *status)
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
return php_random_range((php_random_algo_with_state){ return php_random_range((php_random_algo_with_state){
.algo = &php_random_algo_pcgoneseq128xslrr64, .algo = &php_random_algo_pcgoneseq128xslrr64,
.status = status, .state = state,
}, min, max); }, min, max);
} }
static bool serialize(void *status, HashTable *data) static bool serialize(void *state, HashTable *data)
{ {
php_random_status_state_pcgoneseq128xslrr64 *s = status; php_random_status_state_pcgoneseq128xslrr64 *s = state;
uint64_t u; uint64_t u;
zval z; zval z;
@ -85,9 +85,9 @@ static bool serialize(void *status, HashTable *data)
return true; return true;
} }
static bool unserialize(void *status, HashTable *data) static bool unserialize(void *state, HashTable *data)
{ {
php_random_status_state_pcgoneseq128xslrr64 *s = status; php_random_status_state_pcgoneseq128xslrr64 *s = state;
uint64_t u[2]; uint64_t u[2];
zval *t; zval *t;
@ -146,7 +146,7 @@ PHPAPI void php_random_pcgoneseq128xslrr64_advance(php_random_status_state_pcgon
PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, __construct) PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, __construct)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_pcgoneseq128xslrr64 *state = engine.status; php_random_status_state_pcgoneseq128xslrr64 *state = engine.state;
zend_string *str_seed = NULL; zend_string *str_seed = NULL;
zend_long int_seed = 0; zend_long int_seed = 0;
bool seed_is_null = true; bool seed_is_null = true;
@ -195,7 +195,7 @@ PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, __construct)
PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, jump) PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, jump)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_pcgoneseq128xslrr64 *state = engine.status; php_random_status_state_pcgoneseq128xslrr64 *state = engine.state;
zend_long advance = 0; zend_long advance = 0;
ZEND_PARSE_PARAMETERS_START(1, 1) ZEND_PARSE_PARAMETERS_START(1, 1)

View file

@ -25,7 +25,7 @@
#include "Zend/zend_exceptions.h" #include "Zend/zend_exceptions.h"
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
zend_ulong r = 0; zend_ulong r = 0;
@ -37,7 +37,7 @@ static php_random_result generate(void *status)
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
zend_long result = 0; zend_long result = 0;

View file

@ -21,9 +21,9 @@
#include "php.h" #include "php.h"
#include "php_random.h" #include "php_random.h"
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
php_random_status_state_user *s = status; php_random_status_state_user *s = state;
uint64_t result = 0; uint64_t result = 0;
size_t size; size_t size;
zval retval; zval retval;
@ -65,11 +65,11 @@ static php_random_result generate(void *status)
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
return php_random_range((php_random_algo_with_state){ return php_random_range((php_random_algo_with_state){
.algo = &php_random_algo_user, .algo = &php_random_algo_user,
.status = status, .state = state,
}, min, max); }, min, max);
} }

View file

@ -102,30 +102,30 @@ static inline void seed64(php_random_status_state_xoshiro256starstar *state, uin
seed256(state, s[0], s[1], s[2], s[3]); seed256(state, s[0], s[1], s[2], s[3]);
} }
static void seed(void *status, uint64_t seed) static void seed(void *state, uint64_t seed)
{ {
seed64(status, seed); seed64(state, seed);
} }
static php_random_result generate(void *status) static php_random_result generate(void *state)
{ {
return (php_random_result){ return (php_random_result){
.size = sizeof(uint64_t), .size = sizeof(uint64_t),
.result = generate_state(status), .result = generate_state(state),
}; };
} }
static zend_long range(void *status, zend_long min, zend_long max) static zend_long range(void *state, zend_long min, zend_long max)
{ {
return php_random_range((php_random_algo_with_state){ return php_random_range((php_random_algo_with_state){
.algo = &php_random_algo_xoshiro256starstar, .algo = &php_random_algo_xoshiro256starstar,
.status = status, .state = state,
}, min, max); }, min, max);
} }
static bool serialize(void *status, HashTable *data) static bool serialize(void *state, HashTable *data)
{ {
php_random_status_state_xoshiro256starstar *s = status; php_random_status_state_xoshiro256starstar *s = state;
zval t; zval t;
for (uint32_t i = 0; i < 4; i++) { for (uint32_t i = 0; i < 4; i++) {
@ -136,9 +136,9 @@ static bool serialize(void *status, HashTable *data)
return true; return true;
} }
static bool unserialize(void *status, HashTable *data) static bool unserialize(void *state, HashTable *data)
{ {
php_random_status_state_xoshiro256starstar *s = status; php_random_status_state_xoshiro256starstar *s = state;
zval *t; zval *t;
/* Verify the expected number of elements, this implicitly ensures that no additional elements are present. */ /* Verify the expected number of elements, this implicitly ensures that no additional elements are present. */
@ -184,7 +184,7 @@ PHPAPI void php_random_xoshiro256starstar_jump_long(php_random_status_state_xosh
PHP_METHOD(Random_Engine_Xoshiro256StarStar, jump) PHP_METHOD(Random_Engine_Xoshiro256StarStar, jump)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_xoshiro256starstar *state = engine.status; php_random_status_state_xoshiro256starstar *state = engine.state;
ZEND_PARSE_PARAMETERS_NONE(); ZEND_PARSE_PARAMETERS_NONE();
@ -196,7 +196,7 @@ PHP_METHOD(Random_Engine_Xoshiro256StarStar, jump)
PHP_METHOD(Random_Engine_Xoshiro256StarStar, jumpLong) PHP_METHOD(Random_Engine_Xoshiro256StarStar, jumpLong)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_xoshiro256starstar *state = engine.status; php_random_status_state_xoshiro256starstar *state = engine.state;
ZEND_PARSE_PARAMETERS_NONE(); ZEND_PARSE_PARAMETERS_NONE();
@ -208,7 +208,7 @@ PHP_METHOD(Random_Engine_Xoshiro256StarStar, jumpLong)
PHP_METHOD(Random_Engine_Xoshiro256StarStar, __construct) PHP_METHOD(Random_Engine_Xoshiro256StarStar, __construct)
{ {
php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine; php_random_algo_with_state engine = Z_RANDOM_ENGINE_P(ZEND_THIS)->engine;
php_random_status_state_xoshiro256starstar *state = engine.status; php_random_status_state_xoshiro256starstar *state = engine.state;
zend_string *str_seed = NULL; zend_string *str_seed = NULL;
zend_long int_seed = 0; zend_long int_seed = 0;
bool seed_is_null = true; bool seed_is_null = true;

View file

@ -96,16 +96,16 @@ typedef struct _php_random_result {
typedef struct _php_random_algo { typedef struct _php_random_algo {
const size_t state_size; const size_t state_size;
void (*seed)(void *status, uint64_t seed); void (*seed)(void *state, uint64_t seed);
php_random_result (*generate)(void *status); php_random_result (*generate)(void *state);
zend_long (*range)(void *status, zend_long min, zend_long max); zend_long (*range)(void *state, zend_long min, zend_long max);
bool (*serialize)(void *status, HashTable *data); bool (*serialize)(void *state, HashTable *data);
bool (*unserialize)(void *status, HashTable *data); bool (*unserialize)(void *state, HashTable *data);
} php_random_algo; } php_random_algo;
typedef struct _php_random_algo_with_state { typedef struct _php_random_algo_with_state {
const php_random_algo *algo; const php_random_algo *algo;
void *status; void *state;
} php_random_algo_with_state; } php_random_algo_with_state;
extern PHPAPI const php_random_algo php_random_algo_combinedlcg; extern PHPAPI const php_random_algo php_random_algo_combinedlcg;
@ -170,7 +170,7 @@ static inline php_random_algo_with_state php_random_default_engine(void)
{ {
return (php_random_algo_with_state){ return (php_random_algo_with_state){
.algo = php_random_default_algo(), .algo = php_random_default_algo(),
.status = php_random_default_status(), .state = php_random_default_status(),
}; };
} }

View file

@ -77,7 +77,7 @@ static zend_object_handlers random_randomizer_object_handlers;
PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t umax) PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t umax)
{ {
const php_random_algo *algo = engine.algo; const php_random_algo *algo = engine.algo;
void *status = engine.status; void *state = engine.state;
uint32_t result, limit; uint32_t result, limit;
size_t total_size = 0; size_t total_size = 0;
@ -86,7 +86,7 @@ PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t u
result = 0; result = 0;
total_size = 0; total_size = 0;
do { do {
php_random_result r = algo->generate(status); php_random_result r = algo->generate(state);
result = result | (((uint32_t) r.result) << (total_size * 8)); result = result | (((uint32_t) r.result) << (total_size * 8));
total_size += r.size; total_size += r.size;
if (EG(exception)) { if (EG(exception)) {
@ -121,7 +121,7 @@ PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t u
result = 0; result = 0;
total_size = 0; total_size = 0;
do { do {
php_random_result r = algo->generate(status); php_random_result r = algo->generate(state);
result = result | (((uint32_t) r.result) << (total_size * 8)); result = result | (((uint32_t) r.result) << (total_size * 8));
total_size += r.size; total_size += r.size;
if (EG(exception)) { if (EG(exception)) {
@ -136,7 +136,7 @@ PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t u
PHPAPI uint64_t php_random_range64(php_random_algo_with_state engine, uint64_t umax) PHPAPI uint64_t php_random_range64(php_random_algo_with_state engine, uint64_t umax)
{ {
const php_random_algo *algo = engine.algo; const php_random_algo *algo = engine.algo;
void *status = engine.status; void *state = engine.state;
uint64_t result, limit; uint64_t result, limit;
size_t total_size = 0; size_t total_size = 0;
@ -145,7 +145,7 @@ PHPAPI uint64_t php_random_range64(php_random_algo_with_state engine, uint64_t u
result = 0; result = 0;
total_size = 0; total_size = 0;
do { do {
php_random_result r = algo->generate(status); php_random_result r = algo->generate(state);
result = result | (r.result << (total_size * 8)); result = result | (r.result << (total_size * 8));
total_size += r.size; total_size += r.size;
if (EG(exception)) { if (EG(exception)) {
@ -180,7 +180,7 @@ PHPAPI uint64_t php_random_range64(php_random_algo_with_state engine, uint64_t u
result = 0; result = 0;
total_size = 0; total_size = 0;
do { do {
php_random_result r = algo->generate(status); php_random_result r = algo->generate(state);
result = result | (r.result << (total_size * 8)); result = result | (r.result << (total_size * 8));
total_size += r.size; total_size += r.size;
if (EG(exception)) { if (EG(exception)) {
@ -226,7 +226,7 @@ static void randomizer_free_obj(zend_object *object) {
php_random_randomizer *randomizer = php_random_randomizer_from_obj(object); php_random_randomizer *randomizer = php_random_randomizer_from_obj(object);
if (randomizer->is_userland_algo) { if (randomizer->is_userland_algo) {
php_random_status_free(randomizer->engine.status, false); php_random_status_free(randomizer->engine.state, false);
} }
zend_object_std_dtor(&randomizer->std); zend_object_std_dtor(&randomizer->std);
@ -256,7 +256,7 @@ PHPAPI php_random_engine *php_random_engine_common_init(zend_class_entry *ce, ze
engine->engine = (php_random_algo_with_state){ engine->engine = (php_random_algo_with_state){
.algo = algo, .algo = algo,
.status = php_random_status_alloc(algo, false) .state = php_random_status_alloc(algo, false)
}; };
engine->std.handlers = handlers; engine->std.handlers = handlers;
@ -267,7 +267,7 @@ PHPAPI void php_random_engine_common_free_object(zend_object *object)
{ {
php_random_engine *engine = php_random_engine_from_obj(object); php_random_engine *engine = php_random_engine_from_obj(object);
php_random_status_free(engine->engine.status, false); php_random_status_free(engine->engine.state, false);
zend_object_std_dtor(object); zend_object_std_dtor(object);
} }
@ -277,8 +277,8 @@ PHPAPI zend_object *php_random_engine_common_clone_object(zend_object *object)
php_random_engine *new_engine = php_random_engine_from_obj(old_engine->std.ce->create_object(old_engine->std.ce)); php_random_engine *new_engine = php_random_engine_from_obj(old_engine->std.ce->create_object(old_engine->std.ce));
new_engine->engine.algo = old_engine->engine.algo; new_engine->engine.algo = old_engine->engine.algo;
if (old_engine->engine.status) { if (old_engine->engine.state) {
new_engine->engine.status = php_random_status_copy(old_engine->engine.algo, old_engine->engine.status, new_engine->engine.status); new_engine->engine.state = php_random_status_copy(old_engine->engine.algo, old_engine->engine.state, new_engine->engine.state);
} }
zend_objects_clone_members(&new_engine->std, &old_engine->std); zend_objects_clone_members(&new_engine->std, &old_engine->std);
@ -309,14 +309,14 @@ PHPAPI const php_random_algo *php_random_default_algo(void)
/* {{{ php_random_default_status */ /* {{{ php_random_default_status */
PHPAPI void *php_random_default_status(void) PHPAPI void *php_random_default_status(void)
{ {
php_random_status_state_mt19937 *status = RANDOM_G(mt19937); php_random_status_state_mt19937 *state = RANDOM_G(mt19937);
if (!RANDOM_G(mt19937_seeded)) { if (!RANDOM_G(mt19937_seeded)) {
php_random_mt19937_seed_default(status); php_random_mt19937_seed_default(state);
RANDOM_G(mt19937_seeded) = true; RANDOM_G(mt19937_seeded) = true;
} }
return status; return state;
} }
/* }}} */ /* }}} */
@ -390,14 +390,14 @@ PHPAPI bool php_random_hex2bin_le(zend_string *hexstr, void *dest)
/* {{{ php_combined_lcg */ /* {{{ php_combined_lcg */
PHPAPI double php_combined_lcg(void) PHPAPI double php_combined_lcg(void)
{ {
php_random_status_state_combinedlcg *status = RANDOM_G(combined_lcg); php_random_status_state_combinedlcg *state = RANDOM_G(combined_lcg);
if (!RANDOM_G(combined_lcg_seeded)) { if (!RANDOM_G(combined_lcg_seeded)) {
php_random_combinedlcg_seed_default(status); php_random_combinedlcg_seed_default(state);
RANDOM_G(combined_lcg_seeded) = true; RANDOM_G(combined_lcg_seeded) = true;
} }
return php_random_algo_combinedlcg.generate(status).result * 4.656613e-10; return php_random_algo_combinedlcg.generate(state).result * 4.656613e-10;
} }
/* }}} */ /* }}} */

View file

@ -39,7 +39,7 @@ static inline void randomizer_common_init(php_random_randomizer *randomizer, zen
php_random_status_state_user *state = php_random_status_alloc(&php_random_algo_user, false); php_random_status_state_user *state = php_random_status_alloc(&php_random_algo_user, false);
randomizer->engine = (php_random_algo_with_state){ randomizer->engine = (php_random_algo_with_state){
.algo = &php_random_algo_user, .algo = &php_random_algo_user,
.status = state, .state = state,
}; };
zend_string *mname; zend_string *mname;
@ -103,7 +103,7 @@ PHP_METHOD(Random_Randomizer, nextFloat)
result = 0; result = 0;
total_size = 0; total_size = 0;
do { do {
php_random_result r = engine.algo->generate(engine.status); php_random_result r = engine.algo->generate(engine.state);
result = result | (r.result << (total_size * 8)); result = result | (r.result << (total_size * 8));
total_size += r.size; total_size += r.size;
if (EG(exception)) { if (EG(exception)) {
@ -214,7 +214,7 @@ PHP_METHOD(Random_Randomizer, nextInt)
ZEND_PARSE_PARAMETERS_NONE(); ZEND_PARSE_PARAMETERS_NONE();
php_random_result result = engine.algo->generate(engine.status); php_random_result result = engine.algo->generate(engine.state);
if (EG(exception)) { if (EG(exception)) {
RETURN_THROWS(); RETURN_THROWS();
} }
@ -248,9 +248,9 @@ PHP_METHOD(Random_Randomizer, getInt)
if (UNEXPECTED( if (UNEXPECTED(
engine.algo->range == php_random_algo_mt19937.range engine.algo->range == php_random_algo_mt19937.range
&& ((php_random_status_state_mt19937 *) engine.status)->mode != MT_RAND_MT19937 && ((php_random_status_state_mt19937 *) engine.state)->mode != MT_RAND_MT19937
)) { )) {
uint64_t r = php_random_algo_mt19937.generate(engine.status).result >> 1; uint64_t r = php_random_algo_mt19937.generate(engine.state).result >> 1;
/* This is an inlined version of the RAND_RANGE_BADSCALING macro that does not invoke UB when encountering /* This is an inlined version of the RAND_RANGE_BADSCALING macro that does not invoke UB when encountering
* (max - min) > ZEND_LONG_MAX. * (max - min) > ZEND_LONG_MAX.
@ -259,7 +259,7 @@ PHP_METHOD(Random_Randomizer, getInt)
result = (zend_long) (offset + min); result = (zend_long) (offset + min);
} else { } else {
result = engine.algo->range(engine.status, min, max); result = engine.algo->range(engine.state, min, max);
} }
if (EG(exception)) { if (EG(exception)) {
@ -292,7 +292,7 @@ PHP_METHOD(Random_Randomizer, getBytes)
retval = zend_string_alloc(length, 0); retval = zend_string_alloc(length, 0);
while (total_size < length) { while (total_size < length) {
php_random_result result = engine.algo->generate(engine.status); php_random_result result = engine.algo->generate(engine.state);
if (EG(exception)) { if (EG(exception)) {
zend_string_free(retval); zend_string_free(retval);
RETURN_THROWS(); RETURN_THROWS();
@ -411,7 +411,7 @@ PHP_METHOD(Random_Randomizer, getBytesFromString)
if (max_offset > 0xff) { if (max_offset > 0xff) {
while (total_size < length) { while (total_size < length) {
uint64_t offset = engine.algo->range(engine.status, 0, max_offset); uint64_t offset = engine.algo->range(engine.state, 0, max_offset);
if (EG(exception)) { if (EG(exception)) {
zend_string_free(retval); zend_string_free(retval);
@ -432,7 +432,7 @@ PHP_METHOD(Random_Randomizer, getBytesFromString)
int failures = 0; int failures = 0;
while (total_size < length) { while (total_size < length) {
php_random_result result = engine.algo->generate(engine.status); php_random_result result = engine.algo->generate(engine.state);
if (EG(exception)) { if (EG(exception)) {
zend_string_free(retval); zend_string_free(retval);
RETURN_THROWS(); RETURN_THROWS();

View file

@ -3214,7 +3214,7 @@ boundary_error:
PHPAPI bool php_array_data_shuffle(php_random_algo_with_state engine, zval *array) /* {{{ */ PHPAPI bool php_array_data_shuffle(php_random_algo_with_state engine, zval *array) /* {{{ */
{ {
const php_random_algo *algo = engine.algo; const php_random_algo *algo = engine.algo;
void *status = engine.status; void *state = engine.state;
int64_t idx, j, n_elems, rnd_idx, n_left; int64_t idx, j, n_elems, rnd_idx, n_left;
zval *zv, temp; zval *zv, temp;
@ -3256,7 +3256,7 @@ PHPAPI bool php_array_data_shuffle(php_random_algo_with_state engine, zval *arra
} }
} }
while (--n_left) { while (--n_left) {
rnd_idx = algo->range(status, 0, n_left); rnd_idx = algo->range(state, 0, n_left);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }
@ -3284,7 +3284,7 @@ PHPAPI bool php_array_data_shuffle(php_random_algo_with_state engine, zval *arra
} }
} }
while (--n_left) { while (--n_left) {
rnd_idx = algo->range(status, 0, n_left); rnd_idx = algo->range(state, 0, n_left);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }
@ -6197,7 +6197,7 @@ clean_up:
PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input, zend_long num_req, zval *retval, bool silent) PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input, zend_long num_req, zval *retval, bool silent)
{ {
const php_random_algo *algo = engine.algo; const php_random_algo *algo = engine.algo;
void *status = engine.status; void *state = engine.state;
HashTable *ht = Z_ARRVAL_P(input); HashTable *ht = Z_ARRVAL_P(input);
uint32_t num_avail = zend_hash_num_elements(ht); uint32_t num_avail = zend_hash_num_elements(ht);
@ -6223,7 +6223,7 @@ PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input,
/* If less than 1/2 of elements are used, don't sample. Instead search for a /* If less than 1/2 of elements are used, don't sample. Instead search for a
* specific offset using linear scan. */ * specific offset using linear scan. */
i = 0; i = 0;
randval = algo->range(status, 0, num_avail - 1); randval = algo->range(state, 0, num_avail - 1);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }
@ -6246,7 +6246,7 @@ PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input,
* For N=10 this becomes smaller than 0.1%. */ * For N=10 this becomes smaller than 0.1%. */
if (HT_IS_PACKED(ht)) { if (HT_IS_PACKED(ht)) {
do { do {
randval = algo->range(status, 0, ht->nNumUsed - 1); randval = algo->range(state, 0, ht->nNumUsed - 1);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }
@ -6258,7 +6258,7 @@ PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input,
} while (true); } while (true);
} else { } else {
do { do {
randval = algo->range(status, 0, ht->nNumUsed - 1); randval = algo->range(state, 0, ht->nNumUsed - 1);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }
@ -6296,7 +6296,7 @@ PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input,
i = num_req; i = num_req;
int failures = 0; int failures = 0;
while (i) { while (i) {
randval = algo->range(status, 0, num_avail - 1); randval = algo->range(state, 0, num_avail - 1);
if (EG(exception)) { if (EG(exception)) {
goto fail; goto fail;
} }

View file

@ -5956,7 +5956,7 @@ PHP_FUNCTION(str_rot13)
PHPAPI bool php_binary_string_shuffle(php_random_algo_with_state engine, char *str, zend_long len) /* {{{ */ PHPAPI bool php_binary_string_shuffle(php_random_algo_with_state engine, char *str, zend_long len) /* {{{ */
{ {
const php_random_algo *algo = engine.algo; const php_random_algo *algo = engine.algo;
void *status = engine.status; void *state = engine.state;
int64_t n_elems, rnd_idx, n_left; int64_t n_elems, rnd_idx, n_left;
char temp; char temp;
@ -5972,7 +5972,7 @@ PHPAPI bool php_binary_string_shuffle(php_random_algo_with_state engine, char *s
n_left = n_elems; n_left = n_elems;
while (--n_left) { while (--n_left) {
rnd_idx = algo->range(status, 0, n_left); rnd_idx = algo->range(state, 0, n_left);
if (EG(exception)) { if (EG(exception)) {
return false; return false;
} }