Fix numerous bugs in CERT_FindCertByKeyID. Bug 233019. r=jpierre

This commit is contained in:
nelsonb%netscape.com 2004-02-04 08:54:06 +00:00
Родитель 8339f01ba5
Коммит a00bb096af
1 изменённых файлов: 18 добавлений и 8 удалений

Просмотреть файл

@ -412,18 +412,28 @@ CERT_FindCertByName(CERTCertDBHandle *handle, SECItem *name)
CERTCertificate *
CERT_FindCertByKeyID(CERTCertDBHandle *handle, SECItem *name, SECItem *keyID)
{
CERTCertList *list =
CERT_CreateSubjectCertList(NULL,handle,name,0,PR_FALSE);
CERTCertList *list;
CERTCertificate *cert = NULL;
CERTCertListNode *node = CERT_LIST_HEAD(list);
CERTCertListNode *node, *head;
list = CERT_CreateSubjectCertList(NULL,handle,name,0,PR_FALSE);
if (list == NULL) return NULL;
for (node = CERT_LIST_HEAD(list); node ; node = CERT_LIST_NEXT(node)) {
if (SECITEM_ItemsAreEqual(&cert->subjectKeyID, keyID) ) {
node = head = CERT_LIST_HEAD(list);
if (head) {
do {
if (node->cert &&
SECITEM_ItemsAreEqual(&node->cert->subjectKeyID, keyID) ) {
cert = CERT_DupCertificate(node->cert);
break;
goto done;
}
node = CERT_LIST_NEXT(node);
} while (node && head != node);
}
PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER);
done:
if (list) {
CERT_DestroyCertList(list);
}
return cert;
}