зеркало из https://github.com/mozilla/gecko-dev.git
Fix numerous bugs in CERT_FindCertByKeyID. Bug 233019. r=jpierre
This commit is contained in:
Родитель
8339f01ba5
Коммит
a00bb096af
|
@ -412,18 +412,28 @@ CERT_FindCertByName(CERTCertDBHandle *handle, SECItem *name)
|
||||||
CERTCertificate *
|
CERTCertificate *
|
||||||
CERT_FindCertByKeyID(CERTCertDBHandle *handle, SECItem *name, SECItem *keyID)
|
CERT_FindCertByKeyID(CERTCertDBHandle *handle, SECItem *name, SECItem *keyID)
|
||||||
{
|
{
|
||||||
CERTCertList *list =
|
CERTCertList *list;
|
||||||
CERT_CreateSubjectCertList(NULL,handle,name,0,PR_FALSE);
|
|
||||||
CERTCertificate *cert = NULL;
|
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;
|
if (list == NULL) return NULL;
|
||||||
|
|
||||||
for (node = CERT_LIST_HEAD(list); node ; node = CERT_LIST_NEXT(node)) {
|
node = head = CERT_LIST_HEAD(list);
|
||||||
if (SECITEM_ItemsAreEqual(&cert->subjectKeyID, keyID) ) {
|
if (head) {
|
||||||
|
do {
|
||||||
|
if (node->cert &&
|
||||||
|
SECITEM_ItemsAreEqual(&node->cert->subjectKeyID, keyID) ) {
|
||||||
cert = CERT_DupCertificate(node->cert);
|
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;
|
return cert;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче