diff --git a/security/nss/lib/certhigh/certvfy.c b/security/nss/lib/certhigh/certvfy.c index a1ac6d113..4b080a0fb 100644 --- a/security/nss/lib/certhigh/certvfy.c +++ b/security/nss/lib/certhigh/certvfy.c @@ -2122,6 +2122,7 @@ CERT_GetCertChainFromCert(CERTCertificate *cert, PRTime time, SECCertUsage usage chain = CERT_NewCertList(); if (NULL == chain) { + CERT_DestroyCertificate(cert); PORT_SetError(SEC_ERROR_NO_MEMORY); return NULL; } @@ -2129,6 +2130,7 @@ CERT_GetCertChainFromCert(CERTCertificate *cert, PRTime time, SECCertUsage usage while (cert != NULL && ++count <= CERT_MAX_CERT_CHAIN) { if (SECSuccess != CERT_AddCertToListTail(chain, cert)) { /* return partial chain */ + CERT_DestroyCertificate(cert); PORT_SetError(SEC_ERROR_NO_MEMORY); return chain; } @@ -2142,6 +2144,7 @@ CERT_GetCertChainFromCert(CERTCertificate *cert, PRTime time, SECCertUsage usage } /* return partial chain */ + CERT_DestroyCertificate(cert); PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER); return chain; }