mirror of
https://github.com/zeek/zeek.git
synced 2025-10-09 01:58:20 +00:00
Add zeek::max_random() & fix misuse of RAND_MAX w/ zeek::random_number()
In deterministic mode, RAND_MAX is not related to the result of zeek::random_number() (formerly bro_random()), but some logic was using RAND_MAX as indication of the possible range of values. The new zeek::max_random() will give the correct upper-bound regardless of whether deterministic-mode is used.
This commit is contained in:
parent
bde38893ce
commit
d486af06b1
6 changed files with 24 additions and 9 deletions
10
src/util.cc
10
src/util.cc
|
@ -1183,13 +1183,21 @@ bool have_random_seed()
|
|||
return bro_rand_determistic;
|
||||
}
|
||||
|
||||
constexpr uint32_t zeek_prng_mod = 2147483647;
|
||||
constexpr uint32_t zeek_prng_max = zeek_prng_mod - 1;
|
||||
|
||||
long int zeek::max_random()
|
||||
{
|
||||
return bro_rand_determistic ? zeek_prng_max : RAND_MAX;
|
||||
}
|
||||
|
||||
long int zeek::prng(long int state)
|
||||
{
|
||||
// Use our own simple linear congruence PRNG to make sure we are
|
||||
// predictable across platforms. (Lehmer RNG, Schrage's method)
|
||||
// Note: the choice of "long int" storage type for the state is mostly
|
||||
// for parity with the possible return values of random().
|
||||
constexpr uint32_t m = 2147483647;
|
||||
constexpr uint32_t m = zeek_prng_mod;
|
||||
constexpr uint32_t a = 16807;
|
||||
constexpr uint32_t q = m / a;
|
||||
constexpr uint32_t r = m % a;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue