diff options
author | Tim Taubert <ttaubert@mozilla.com> | 2017-02-27 14:37:04 +0100 |
---|---|---|
committer | Tim Taubert <ttaubert@mozilla.com> | 2017-02-27 14:37:04 +0100 |
commit | 84395235f647b1b8b7268945989041e3b1d32844 (patch) | |
tree | 2fcb676d5cb6a709e6f735aa2b6721f255aa4f44 /lib/certdb | |
parent | 5919afafe7133be8ca871a08f43e77562afe7945 (diff) | |
download | nss-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.c | 6 | ||||
-rw-r--r-- | lib/certdb/stanpcertdb.c | 28 |
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); |