handle the case when BN_new returns NULL
[openssl.git] / crypto / bn / bn_lib.c
index 3e4965d695e5c7655d0aea5bca5f06252ae3deb7..89a3267b4af10485ef95b9ffe5e33a169e352feb 100644 (file)
@@ -458,12 +458,20 @@ BIGNUM *bn_dup_expand(const BIGNUM *b, int words)
                if (a)
                        {
                        r = BN_new();
                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
                   internal_bn_expand(), and NULL should be returned */
                }
        else