diff options
-rw-r--r-- | crypto/bn/bn_lib.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index 3e4965d695..89a3267b4a 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -458,12 +458,20 @@ BIGNUM *bn_dup_expand(const BIGNUM *b, int words) if (a) { r = BN_new(); - r->top = b->top; - r->dmax = words; - r->neg = b->neg; - r->d = a; + if (r) + { + r->top = b->top; + r->dmax = words; + r->neg = b->neg; + r->d = a; + } + else + { + /* r == NULL, BN_new failure */ + OPENSSL_free(a); + } } - /* Otherwise, there was an error in allocation in + /* If a == NULL, there was an error in allocation in internal_bn_expand(), and NULL should be returned */ } else |