Commit 524fdd51 authored by Bernd Edlinger's avatar Bernd Edlinger
Browse files

Clear outputs in PKCS12_parse error handling.

parent 5b7b0115
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -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) {
@@ -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 */

    /*
@@ -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)) {
@@ -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;