| --- openssl-1.0.1e.orig/crypto/dsa/dsa_ameth.c 2016-03-14 14:28:34.995124120 -0700 |
| +++ openssl-1.0.1e/crypto/dsa/dsa_ameth.c 2016-03-14 14:29:23.070940703 -0700 |
| @@ -201,6 +201,8 @@ |
| STACK_OF(ASN1_TYPE) *ndsa = NULL; |
| DSA *dsa = NULL; |
| |
| + int ret = 0; |
| + |
| if (!PKCS8_pkey_get0(NULL, &p, &pklen, &palg, p8)) |
| return 0; |
| X509_ALGOR_get0(NULL, &ptype, &pval, palg); |
| @@ -281,23 +283,20 @@ |
| } |
| |
| EVP_PKEY_assign_DSA(pkey, dsa); |
| - BN_CTX_free (ctx); |
| - if(ndsa) |
| - sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); |
| - else |
| - ASN1_INTEGER_free(privkey); |
| - |
| - return 1; |
| + ret = 1; |
| + goto done; |
| |
| decerr: |
| DSAerr(DSA_F_DSA_PRIV_DECODE, EVP_R_DECODE_ERROR); |
| dsaerr: |
| + DSA_free(dsa); |
| + done: |
| BN_CTX_free (ctx); |
| - if (privkey) |
| + if (ndsa) |
| + sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); |
| + else |
| ASN1_INTEGER_free(privkey); |
| - sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); |
| - DSA_free(dsa); |
| - return 0; |
| + return ret; |
| } |
| |
| static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) |