Fix two leaks in X509_REQ_to_X509
Issue #182 Reviewed-by: Stephen Henson <steve@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
@@ -70,10 +70,11 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
|
|||||||
X509 *ret = NULL;
|
X509 *ret = NULL;
|
||||||
X509_CINF *xi = NULL;
|
X509_CINF *xi = NULL;
|
||||||
X509_NAME *xn;
|
X509_NAME *xn;
|
||||||
|
EVP_PKEY *pubkey = NULL;
|
||||||
|
|
||||||
if ((ret = X509_new()) == NULL) {
|
if ((ret = X509_new()) == NULL) {
|
||||||
X509err(X509_F_X509_REQ_TO_X509, ERR_R_MALLOC_FAILURE);
|
X509err(X509_F_X509_REQ_TO_X509, ERR_R_MALLOC_FAILURE);
|
||||||
goto err;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* duplicate the request */
|
/* 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);
|
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;
|
goto err;
|
||||||
if (X509_set_issuer_name(ret, X509_NAME_dup(xn)) == 0)
|
if (X509_set_issuer_name(ret, xn) == 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (X509_gmtime_adj(xi->validity.notBefore, 0) == NULL)
|
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)
|
NULL)
|
||||||
goto err;
|
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()))
|
if (!X509_sign(ret, pkey, EVP_md5()))
|
||||||
goto err;
|
goto err;
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
err_pkey:
|
||||||
|
EVP_PKEY_free(pubkey);
|
||||||
err:
|
err:
|
||||||
X509_free(ret);
|
X509_free(ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user