summaryrefslogtreecommitdiff
path: root/security/nss/lib/smime
diff options
context:
space:
mode:
authornelsonb%netscape.com <devnull@localhost>2003-12-19 03:58:28 +0000
committernelsonb%netscape.com <devnull@localhost>2003-12-19 03:58:28 +0000
commit0ccca0b90775a62fa575ecef481a4456a670c60c (patch)
treef1b0a5580442bfb9f849175e643f64c5fa394151 /security/nss/lib/smime
parentcf5617282f2f0b393d8e8619cbe1a6a32b1d9198 (diff)
downloadnss-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.c5
-rw-r--r--security/nss/lib/smime/cmssigdata.c6
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;
}