Skip to content

Commit

Permalink
Clear outputs in PKCS12_parse error handling.
Browse files Browse the repository at this point in the history
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from openssl#4145)
  • Loading branch information
bernd-edlinger committed Aug 17, 2017
1 parent 5b7b011 commit 524fdd5
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions crypto/pkcs12/p12_kiss.c
Expand Up @@ -34,6 +34,12 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
{
STACK_OF(X509) *ocerts = NULL;
X509 *x = NULL;

if (pkey)
*pkey = NULL;
if (cert)
*cert = NULL;

/* Check for NULL PKCS12 structure */

if (!p12) {
Expand All @@ -42,11 +48,6 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
return 0;
}

if (pkey)
*pkey = NULL;
if (cert)
*cert = NULL;

/* Check the mac */

/*
Expand Down Expand Up @@ -75,7 +76,7 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,

if (!ocerts) {
PKCS12err(PKCS12_F_PKCS12_PARSE, ERR_R_MALLOC_FAILURE);
return 0;
goto err;
}

if (!parse_pk12(p12, pass, -1, pkey, ocerts)) {
Expand Down Expand Up @@ -111,10 +112,14 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,

err:

if (pkey)
if (pkey) {
EVP_PKEY_free(*pkey);
if (cert)
*pkey = NULL;
}
if (cert) {
X509_free(*cert);
*cert = NULL;
}
X509_free(x);
sk_X509_pop_free(ocerts, X509_free);
return 0;
Expand Down

0 comments on commit 524fdd5

Please sign in to comment.