mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
stdlib: Fix unintended change to the random_r implementation
Commit d5bceac99d24af1131b90027dab267e437b65cd1 changed the sequence of random numbers. This was completely unintended. The statistical properties of the new sequences are unclear, so restore the old behavior. Fixes commit d5bceac99d24af1131b90027dab267e437b65cd1 ("stdlib: random_r: fix unaligned access in initstate and initstate_r [BZ #30584]"). Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
This commit is contained in:
parent
a3131e71cf
commit
33b684e019
@ -390,9 +390,10 @@ __random_r (struct random_data *buf, int32_t *result)
|
||||
int32_t *end_ptr = buf->end_ptr;
|
||||
uint32_t val;
|
||||
|
||||
val = read_state (rptr, 0);
|
||||
int32_t t = read_state (fptr, 0);
|
||||
write_state (fptr, 0, t + val);
|
||||
/* Avoid integer overflow with uint32_t arihmetic. */
|
||||
val = read_state (fptr, 0);
|
||||
val += read_state (rptr, 0);
|
||||
write_state (fptr, 0, val);
|
||||
/* Chucking least random bit. */
|
||||
*result = val >> 1;
|
||||
++fptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user