From 09e636bf8b26c56953d2c99a3c150fe78bb643ac Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 16 May 2018 06:47:21 -0700 Subject: random: reject negative bignum modulus. * rand.c (random): Function now rejects negative bignums, not only negative fixnums. --- rand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rand.c b/rand.c index e8455b56..a5109701 100644 --- a/rand.c +++ b/rand.c @@ -220,9 +220,9 @@ val random(val state, val modulus) val self = lit("random"); struct rand_state *r = coerce(struct rand_state *, cobj_handle(state, random_state_s)); + mp_int *m; - if (bignump(modulus)) { - mp_int *m = mp(modulus); + if (bignump(modulus) && !ISNEG(m = mp(modulus))) { ucnum bits = mp_count_bits(m) - mp_is_pow_two(m); ucnum rands_needed = (bits + 32 - 1) / 32; ucnum msb_rand_bits = bits % 32; -- cgit v1.2.3