From 887b53b7f330ad93b090d6be0c4733690a58ff89 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Wed, 22 Jul 2020 00:07:34 -0700 Subject: [PATCH] GH-1076: Fix bro_srandom() to replace 0 seeds with 1 The bro_prng() implementation cannot generate 0 as a result since it causes every subsequent number from the PRNG to also be 0, so use the number 1 instead of 0. --- src/util.cc | 4 ++-- testing/btest/Baseline/bifs.rand/out.4 | 6 ++++++ testing/btest/bifs/rand.zeek | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 testing/btest/Baseline/bifs.rand/out.4 diff --git a/src/util.cc b/src/util.cc index 11f18f1358..6660446857 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1072,7 +1072,7 @@ static unsigned int first_seed = 0; static void bro_srandom(unsigned int seed, bool deterministic) { - bro_rand_state = seed; + bro_rand_state = seed == 0 ? 1 : seed; bro_rand_determistic = deterministic; srandom(seed); @@ -1081,7 +1081,7 @@ static void bro_srandom(unsigned int seed, bool deterministic) void bro_srandom(unsigned int seed) { if ( bro_rand_determistic ) - bro_rand_state = seed; + bro_rand_state = seed == 0 ? 1 : seed; else srandom(seed); } diff --git a/testing/btest/Baseline/bifs.rand/out.4 b/testing/btest/Baseline/bifs.rand/out.4 new file mode 100644 index 0000000000..a9a4ef9ac4 --- /dev/null +++ b/testing/btest/Baseline/bifs.rand/out.4 @@ -0,0 +1,6 @@ +0 +131 +755 +4 +634 +473 diff --git a/testing/btest/bifs/rand.zeek b/testing/btest/bifs/rand.zeek index 159f8bc78e..c182ef6a47 100644 --- a/testing/btest/bifs/rand.zeek +++ b/testing/btest/bifs/rand.zeek @@ -2,9 +2,12 @@ # @TEST-EXEC: zeek -b %INPUT >out # @TEST-EXEC: zeek -b %INPUT do_seed=F >out.2 # @TEST-EXEC: unset ZEEK_SEED_FILE && zeek -b %INPUT real_random=T >out.3 +# @TEST-EXEC: for i in $(seq 21); do echo 0 >>random-zero.seed; done +# @TEST-EXEC: ZEEK_SEED_FILE=random-zero.seed zeek -b %INPUT >out.4 # @TEST-EXEC: btest-diff out # @TEST-EXEC: btest-diff out.2 # @TEST-EXEC: btest-diff out.3 +# @TEST-EXEC: btest-diff out.4 const do_seed = T &redef; const real_random = F &redef;