diff options
author | relyea%netscape.com <devnull@localhost> | 2002-08-01 01:21:28 +0000 |
---|---|---|
committer | relyea%netscape.com <devnull@localhost> | 2002-08-01 01:21:28 +0000 |
commit | a889d6479cf25d4abff0ac101be333214561b851 (patch) | |
tree | 702b6fed6455c33bd496569fd533afdb2d42eec6 | |
parent | 2a78bff36665d6f441c45f85331f111807f9805b (diff) | |
download | nss-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.c | 4 | ||||
-rw-r--r-- | security/nss/lib/pki/pkibase.c | 11 |
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); |