From: FdaSilvaYY Date: Wed, 16 Mar 2016 23:15:48 +0000 (+0100) Subject: Fix two leaks in X509_REQ_to_X509 X-Git-Tag: OpenSSL_1_1_0-pre5~143 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=0517538d1a39bc5eb664928a6c40b4a0afad01da;ds=sidebyside Fix two leaks in X509_REQ_to_X509 Issue #182 Reviewed-by: Stephen Henson Reviewed-by: Rich Salz --- diff --git a/crypto/x509/x509_r2x.c b/crypto/x509/x509_r2x.c index a6c5941c2d..dc7e41265c 100644 --- a/crypto/x509/x509_r2x.c +++ b/crypto/x509/x509_r2x.c @@ -70,10 +70,11 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey) X509 *ret = NULL; X509_CINF *xi = NULL; X509_NAME *xn; + EVP_PKEY *pubkey = NULL; if ((ret = X509_new()) == NULL) { X509err(X509_F_X509_REQ_TO_X509, ERR_R_MALLOC_FAILURE); - goto err; + return NULL; } /* duplicate the request */ @@ -89,9 +90,9 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey) } xn = X509_REQ_get_subject_name(r); - if (X509_set_subject_name(ret, X509_NAME_dup(xn)) == 0) + if (X509_set_subject_name(ret, xn) == 0) goto err; - if (X509_set_issuer_name(ret, X509_NAME_dup(xn)) == 0) + if (X509_set_issuer_name(ret, xn) == 0) goto err; if (X509_gmtime_adj(xi->validity.notBefore, 0) == NULL) @@ -100,12 +101,21 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey) NULL) goto err; - X509_set_pubkey(ret, X509_REQ_get_pubkey(r)); + pubkey = X509_REQ_get_pubkey(r); + if (pubkey == NULL) + goto err; + + if (!X509_set_pubkey(ret, pubkey)) + goto err_pkey; + + EVP_PKEY_free(pubkey); if (!X509_sign(ret, pkey, EVP_md5())) goto err; return ret; + err_pkey: + EVP_PKEY_free(pubkey); err: X509_free(ret); return NULL;