diff options
author | marha <marha@users.sourceforge.net> | 2015-06-15 20:18:50 +0200 |
---|---|---|
committer | Mike DePaulo <mikedep333@gmail.com> | 2015-06-22 01:16:46 -0400 |
commit | 36da4a2e0e43928a29ac2ee5c55bf681e90e2f42 (patch) | |
tree | 92633e1022d705c72d0f97315891e719648dd17e /openssl/crypto/bn/bn_rand.c | |
parent | bec4be4c48239613ed1c704ae71bf08754eef711 (diff) | |
download | vcxsrv-36da4a2e0e43928a29ac2ee5c55bf681e90e2f42.tar.gz vcxsrv-36da4a2e0e43928a29ac2ee5c55bf681e90e2f42.tar.bz2 vcxsrv-36da4a2e0e43928a29ac2ee5c55bf681e90e2f42.zip |
Update to openssl-1.0.2crelease/external-1.17.0.0-x
Diffstat (limited to 'openssl/crypto/bn/bn_rand.c')
-rw-r--r-- | openssl/crypto/bn/bn_rand.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/openssl/crypto/bn/bn_rand.c b/openssl/crypto/bn/bn_rand.c index 7ac71ec8e..f9fb2e9e4 100644 --- a/openssl/crypto/bn/bn_rand.c +++ b/openssl/crypto/bn/bn_rand.c @@ -121,6 +121,11 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) int ret = 0, bit, bytes, mask; time_t tim; + if (bits < 0 || (bits == 1 && top > 0)) { + BNerr(BN_F_BNRAND, BN_R_BITS_TOO_SMALL); + return 0; + } + if (bits == 0) { BN_zero(rnd); return 1; @@ -157,7 +162,8 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) unsigned char c; for (i = 0; i < bytes; i++) { - RAND_pseudo_bytes(&c, 1); + if (RAND_pseudo_bytes(&c, 1) < 0) + goto err; if (c >= 128 && i > 0) buf[i] = buf[i - 1]; else if (c < 42) @@ -168,7 +174,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) } #endif - if (top != -1) { + if (top >= 0) { if (top) { if (bit == 0) { buf[0] = 1; |