diff options
author | nelsonb%netscape.com <devnull@localhost> | 2003-12-19 03:58:28 +0000 |
---|---|---|
committer | nelsonb%netscape.com <devnull@localhost> | 2003-12-19 03:58:28 +0000 |
commit | 0ccca0b90775a62fa575ecef481a4456a670c60c (patch) | |
tree | f1b0a5580442bfb9f849175e643f64c5fa394151 /security/nss/lib/smime | |
parent | cf5617282f2f0b393d8e8619cbe1a6a32b1d9198 (diff) | |
download | nss-hg-0ccca0b90775a62fa575ecef481a4456a670c60c.tar.gz |
Don't overwrite pointers to existing message digests if they've been
precomputed. Bugscape bug 54627. r=wtc, jpierre.
Diffstat (limited to 'security/nss/lib/smime')
-rw-r--r-- | security/nss/lib/smime/cmsdigest.c | 5 | ||||
-rw-r--r-- | security/nss/lib/smime/cmssigdata.c | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/security/nss/lib/smime/cmsdigest.c b/security/nss/lib/smime/cmsdigest.c index 700294d7f..6acc5127e 100644 --- a/security/nss/lib/smime/cmsdigest.c +++ b/security/nss/lib/smime/cmsdigest.c @@ -252,7 +252,10 @@ NSS_CMSDigestContext_FinishMultiple(NSSCMSDigestContext *cmsdigcx, cleanup: NSS_CMSDigestContext_Cancel(cmsdigcx); - if (rv == SECSuccess && digestsp) { + /* Don't change the caller's digests pointer if we have no digests. + ** NSS_CMSSignedData_Encode_AfterData depends on this behavior. + */ + if (rv == SECSuccess && digestsp && digests) { *digestsp = digests; } return rv; diff --git a/security/nss/lib/smime/cmssigdata.c b/security/nss/lib/smime/cmssigdata.c index 704f43efa..222cd5cdc 100644 --- a/security/nss/lib/smime/cmssigdata.c +++ b/security/nss/lib/smime/cmssigdata.c @@ -213,8 +213,12 @@ NSS_CMSSignedData_Encode_BeforeData(NSSCMSSignedData *sigd) return SECFailure; } /* set up the digests */ + if (sigd->digests && sigd->digests[0]) { + sigd->contentInfo.digcx = NULL; /* don't attempt to make new ones. */ + } else if (sigd->digestAlgorithms != NULL) { - sigd->contentInfo.digcx = NSS_CMSDigestContext_StartMultiple(sigd->digestAlgorithms); + sigd->contentInfo.digcx = + NSS_CMSDigestContext_StartMultiple(sigd->digestAlgorithms); if (sigd->contentInfo.digcx == NULL) return SECFailure; } |