summaryrefslogtreecommitdiff
path: root/lib/certdb
diff options
context:
space:
mode:
authorTim Taubert <ttaubert@mozilla.com>2017-02-27 14:37:04 +0100
committerTim Taubert <ttaubert@mozilla.com>2017-02-27 14:37:04 +0100
commit84395235f647b1b8b7268945989041e3b1d32844 (patch)
tree2fcb676d5cb6a709e6f735aa2b6721f255aa4f44 /lib/certdb
parent5919afafe7133be8ca871a08f43e77562afe7945 (diff)
downloadnss-hg-84395235f647b1b8b7268945989041e3b1d32844.tar.gz
Bug 1342061 - Fix some misuses of CERT_LIST* APIs r=franziskus
Differential Revision: https://nss-review.dev.mozaws.net/D231
Diffstat (limited to 'lib/certdb')
-rw-r--r--lib/certdb/certdb.c6
-rw-r--r--lib/certdb/stanpcertdb.c28
2 files changed, 15 insertions, 19 deletions
diff --git a/lib/certdb/certdb.c b/lib/certdb/certdb.c
index d37334d73..19c99ee90 100644
--- a/lib/certdb/certdb.c
+++ b/lib/certdb/certdb.c
@@ -2559,9 +2559,9 @@ CERT_AddCertToListHeadWithData(CERTCertList *certs, CERTCertificate *cert,
CERTCertListNode *head;
head = CERT_LIST_HEAD(certs);
-
- if (head == NULL)
- return CERT_AddCertToListTail(certs, cert);
+ if (head == NULL) {
+ goto loser;
+ }
node = (CERTCertListNode *)PORT_ArenaZAlloc(certs->arena,
sizeof(CERTCertListNode));
diff --git a/lib/certdb/stanpcertdb.c b/lib/certdb/stanpcertdb.c
index 2b1aa97cd..3d7275df8 100644
--- a/lib/certdb/stanpcertdb.c
+++ b/lib/certdb/stanpcertdb.c
@@ -515,28 +515,25 @@ CERT_FindCertByKeyID(CERTCertDBHandle *handle, SECItem *name, SECItem *keyID)
{
CERTCertList *list;
CERTCertificate *cert = NULL;
- CERTCertListNode *node, *head;
+ CERTCertListNode *node;
list = CERT_CreateSubjectCertList(NULL, handle, name, 0, PR_FALSE);
if (list == NULL)
return NULL;
- node = head = CERT_LIST_HEAD(list);
- if (head) {
- do {
- if (node->cert &&
- SECITEM_ItemsAreEqual(&node->cert->subjectKeyID, keyID)) {
- cert = CERT_DupCertificate(node->cert);
- goto done;
- }
- node = CERT_LIST_NEXT(node);
- } while (node && head != node);
+ node = CERT_LIST_HEAD(list);
+ while (!CERT_LIST_END(node, list)) {
+ if (node->cert &&
+ SECITEM_ItemsAreEqual(&node->cert->subjectKeyID, keyID)) {
+ cert = CERT_DupCertificate(node->cert);
+ goto done;
+ }
+ node = CERT_LIST_NEXT(node);
}
PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER);
+
done:
- if (list) {
- CERT_DestroyCertList(list);
- }
+ CERT_DestroyCertList(list);
return cert;
}
@@ -635,8 +632,7 @@ common_FindCertByNicknameOrEmailAddrForUsage(CERTCertDBHandle *handle,
if (certlist) {
SECStatus rv =
CERT_FilterCertListByUsage(certlist, lookingForUsage, PR_FALSE);
- if (SECSuccess == rv &&
- !CERT_LIST_END(CERT_LIST_HEAD(certlist), certlist)) {
+ if (SECSuccess == rv && !CERT_LIST_EMPTY(certlist)) {
cert = CERT_DupCertificate(CERT_LIST_HEAD(certlist)->cert);
}
CERT_DestroyCertList(certlist);