summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrelyea%netscape.com <devnull@localhost>2002-08-01 01:21:28 +0000
committerrelyea%netscape.com <devnull@localhost>2002-08-01 01:21:28 +0000
commita889d6479cf25d4abff0ac101be333214561b851 (patch)
tree702b6fed6455c33bd496569fd533afdb2d42eec6
parent2a78bff36665d6f441c45f85331f111807f9805b (diff)
downloadnss-hg-a889d6479cf25d4abff0ac101be333214561b851.tar.gz
1) collections have size values that need to be updated.
2) handle the case where we can't get the encoding from the cert. 3) Check the cert validity when we first extract it.
-rw-r--r--security/nss/lib/pki/certificate.c4
-rw-r--r--security/nss/lib/pki/pkibase.c11
2 files changed, 14 insertions, 1 deletions
diff --git a/security/nss/lib/pki/certificate.c b/security/nss/lib/pki/certificate.c
index 7d45f01ad..c4ef4fb3f 100644
--- a/security/nss/lib/pki/certificate.c
+++ b/security/nss/lib/pki/certificate.c
@@ -92,6 +92,10 @@ nssCertificate_Create
if (status != PR_SUCCESS) {
return (NSSCertificate *)NULL;
}
+ /* all certs need an encoding value */
+ if (rvCert->encoding.data == NULL) {
+ return (NSSCertificate *)NULL;
+ }
return rvCert;
}
diff --git a/security/nss/lib/pki/pkibase.c b/security/nss/lib/pki/pkibase.c
index f81a7854d..3506047d5 100644
--- a/security/nss/lib/pki/pkibase.c
+++ b/security/nss/lib/pki/pkibase.c
@@ -861,11 +861,15 @@ nssPKIObjectCollection_GetObjects
if (!node->object) {
link = PR_NEXT_LINK(link);
PR_REMOVE_LINK(&node->link); /*remove bogus object from list*/
+ collection->size--;
continue;
}
node->haveObject = PR_TRUE;
}
rvObjects[i++] = nssPKIObject_AddRef(node->object);
+ if (i >= rvSize) {
+ break; /* we have all we asked for */
+ }
link = PR_NEXT_LINK(link);
}
return PR_SUCCESS;
@@ -888,6 +892,7 @@ nssPKIObjectCollection_Traverse
if (!node->object) {
link = PR_NEXT_LINK(link);
PR_REMOVE_LINK(&node->link); /*remove bogus object from list*/
+ collection->size--;
continue;
}
node->haveObject = PR_TRUE;
@@ -931,6 +936,7 @@ nssPKIObjectCollection_AddInstanceAsObject
node->object = (*collection->createObject)(node->object);
if (!node->object) {
PR_REMOVE_LINK(&node->link); /*remove bogus object from list*/
+ collection->size--;
return PR_FAILURE;
}
node->haveObject = PR_TRUE;
@@ -979,8 +985,11 @@ cert_getUIDFromObject(nssPKIObject *o, NSSItem *uid)
*/
NSSDER *derCert;
derCert = nssCertificate_GetEncoding(c);
- uid[0] = *derCert;
+ uid[0].data = NULL; uid[0].size = 0;
uid[1].data = NULL; uid[1].size = 0;
+ if (derCert == NULL) {
+ uid[0] = *derCert;
+ }
#else
NSSDER *issuer, *serial;
issuer = nssCertificate_GetIssuer(c);