mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 13:55:43 +00:00
bug 321598, Double memory free in nsIX509::getRawDER
r=rrelyea
This commit is contained in:
parent
19d24e194f
commit
01c86dfa09
@ -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;
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user