Fix memory leak.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 28 Feb 2014 17:00:38 +0000 (17:00 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sat, 1 Mar 2014 23:15:53 +0000 (23:15 +0000)
(cherry picked from commit 124d218889dfca33d277404612f1319afe04107e)

crypto/pkcs12/p12_decr.c

index 9d3557e..992efc0 100644 (file)
@@ -158,27 +158,31 @@ ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *i
                                       const char *pass, int passlen,
                                       void *obj, int zbuf)
 {
-       ASN1_OCTET_STRING *oct;
+       ASN1_OCTET_STRING *oct = NULL;
        unsigned char *in = NULL;
        int inlen;
        if (!(oct = M_ASN1_OCTET_STRING_new ())) {
                PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT,ERR_R_MALLOC_FAILURE);
-               return NULL;
+               goto err;
        }
        inlen = ASN1_item_i2d(obj, &in, it);
        if (!in) {
                PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT,PKCS12_R_ENCODE_ERROR);
-               return NULL;
+               goto err;
        }
        if (!PKCS12_pbe_crypt(algor, pass, passlen, in, inlen, &oct->data,
                                 &oct->length, 1)) {
                PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT,PKCS12_R_ENCRYPT_ERROR);
                OPENSSL_free(in);
-               return NULL;
+               goto err;
        }
        if (zbuf) OPENSSL_cleanse(in, inlen);
        OPENSSL_free(in);
        return oct;
+       err:
+       if (oct)
+               ASN1_OCTET_STRING_free(oct);
+       return NULL;
 }
 
 IMPLEMENT_PKCS12_STACK_OF(PKCS7)