engines/e_capi.c: accommodate recent DSA_SIG_[get|set]0 changes.
authorAndy Polyakov <appro@openssl.org>
Sun, 26 Jun 2016 20:00:37 +0000 (22:00 +0200)
committerAndy Polyakov <appro@openssl.org>
Mon, 27 Jun 2016 21:32:09 +0000 (23:32 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
engines/e_capi.c

index f2d5c3e0912856969b6ef1a868426ad686a85c5d..4923eefa559e5b979b3398e55aa2f4df02013725 100644 (file)
@@ -1029,17 +1029,17 @@ static DSA_SIG *capi_dsa_do_sign(const unsigned char *digest, int dlen,
         capi_addlasterror();
         goto err;
     } else {
-        BIGNUM *r = NULL, *s = NULL;
-        ret = DSA_SIG_new();
-        if (ret == NULL)
-            goto err;
-        DSA_SIG_get0(&r, &s, ret);
-        if (!lend_tobn(r, csigbuf, 20)
-            || !lend_tobn(s, csigbuf + 20, 20)) {
-            DSA_SIG_free(ret);
-            ret = NULL;
+        BIGNUM *r = BN_new(), *s = BN_new();
+
+        if (r == NULL || s == NULL
+            || !lend_tobn(r, csigbuf, 20)
+            || !lend_tobn(s, csigbuf + 20, 20)
+            || (ret = DSA_SIG_new()) == NULL) {
+            BN_free(r); /* BN_free checks for BIGNUM * being NULL */
+            BN_free(s);
             goto err;
         }
+        DSA_SIG_set0(ret, r, s);
     }
 
     /* Now cleanup */