bug 321598, Double memory free in nsIX509::getRawDER

r=rrelyea
This commit is contained in:
kaie%kuix.de 2006-02-22 20:36:53 +00:00
parent 19d24e194f
commit 01c86dfa09
2 changed files with 17 additions and 3 deletions

View File

@ -859,9 +859,12 @@ nsNSSCertificate::GetRawDER(PRUint32 *aLength, PRUint8 **aArray)
return NS_ERROR_NOT_AVAILABLE;
if (mCert) {
*aArray = (PRUint8 *)mCert->derCert.data;
*aLength = mCert->derCert.len;
return NS_OK;
*aArray = (PRUint8*)nsMemory::Alloc(mCert->derCert.len);
if (*aArray) {
memcpy(*aArray, mCert->derCert.data, mCert->derCert.len);
*aLength = mCert->derCert.len;
return NS_OK;
}
}
*aLength = 0;
return NS_ERROR_FAILURE;

View File

@ -351,6 +351,10 @@ nsNSSCertificateDB::handleCACertDownload(nsIArray *x509Certs,
tmpCert = CERT_NewTempCertificate(certdb, &der,
nsnull, PR_FALSE, PR_TRUE);
}
nsMemory::Free(der.data);
der.data = nsnull;
der.len = 0;
if (!tmpCert) {
NS_ERROR("Couldn't create cert from DER blob\n");
return NS_ERROR_FAILURE;
@ -423,6 +427,10 @@ nsNSSCertificateDB::handleCACertDownload(nsIArray *x509Certs,
CERTCertificate *tmpCert2 =
CERT_NewTempCertificate(certdb, &der, nsnull, PR_FALSE, PR_TRUE);
nsMemory::Free(der.data);
der.data = nsnull;
der.len = 0;
if (!tmpCert2) {
NS_ASSERTION(0, "Couldn't create temp cert from DER blob\n");
continue; // Let's try to import the rest of 'em
@ -1605,6 +1613,9 @@ NS_IMETHODIMP nsNSSCertificateDB::AddCertFromBase64(const char *aBase64, const c
if (!tmpCert)
tmpCert = CERT_NewTempCertificate(certdb, &der,
nsnull, PR_FALSE, PR_TRUE);
nsMemory::Free(der.data);
der.data = nsnull;
der.len = 0;
if (!tmpCert) {
NS_ASSERTION(0,"Couldn't create cert from DER blob\n");