summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornelsonb%netscape.com <devnull@localhost>2002-10-25 22:46:48 +0000
committernelsonb%netscape.com <devnull@localhost>2002-10-25 22:46:48 +0000
commit3becfff534870d2b55507dc907d01cf2eba3a741 (patch)
tree43d7ab5954cfbd663e10d89c0e98be7633aca50a
parentd935a22737501cf7f772731fae87c5a3e2db150f (diff)
downloadnss-hg-3becfff534870d2b55507dc907d01cf2eba3a741.tar.gz
Plug cert leak in NSS_SMIMESignerInfo_SaveSMIMEProfile. Bug 176799.
Patch contributed by Kai Engert.
-rw-r--r--security/nss/lib/smime/cmssiginfo.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/security/nss/lib/smime/cmssiginfo.c b/security/nss/lib/smime/cmssiginfo.c
index 5c5e934e7..a9c46d07e 100644
--- a/security/nss/lib/smime/cmssiginfo.c
+++ b/security/nss/lib/smime/cmssiginfo.c
@@ -879,6 +879,7 @@ NSS_SMIMESignerInfo_SaveSMIMEProfile(NSSCMSSignerInfo *signerinfo)
CERTCertDBHandle *certdb;
int save_error;
SECStatus rv;
+ PRBool must_free_cert = PR_FALSE;
certdb = CERT_GetDefaultCertDB();
@@ -900,6 +901,7 @@ NSS_SMIMESignerInfo_SaveSMIMEProfile(NSSCMSSignerInfo *signerinfo)
cert = NSS_SMIMEUtil_GetCertFromEncryptionKeyPreference(certdb, ekp);
if (cert == NULL)
return SECFailure;
+ must_free_cert = PR_TRUE;
}
if (cert == NULL) {
@@ -915,6 +917,8 @@ NSS_SMIMESignerInfo_SaveSMIMEProfile(NSSCMSSignerInfo *signerinfo)
* should have already been saved */
#ifdef notdef
if (CERT_VerifyCert(certdb, cert, PR_TRUE, certUsageEmailRecipient, PR_Now(), signerinfo->cmsg->pwfn_arg, NULL) != SECSuccess) {
+ if (must_free_cert)
+ CERT_DestroyCertificate(cert);
return SECFailure;
}
#endif
@@ -939,6 +943,8 @@ NSS_SMIMESignerInfo_SaveSMIMEProfile(NSSCMSSignerInfo *signerinfo)
}
rv = CERT_SaveSMimeProfile (cert, profile, utc_stime);
+ if (must_free_cert)
+ CERT_DestroyCertificate(cert);
/*
* Restore the saved error in case the calls above set a new