From b1d074b72aa2c78b89adff66bfa9143e87374e81 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 19 Aug 2016 15:22:23 +0100 Subject: [PATCH] From b3a543fc2616501555997d7caf857a74c9c197a7 Mon Sep 17 00:00:00 2001 Bug 1162897, Make NSSTrustDomain_FindTokenByName() take a ref on the token it returns, r=rrelyea --- lib/pk11wrap/pk11cert.c | 7 +++++-- lib/pki/trustdomain.c | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/pk11wrap/pk11cert.c b/lib/pk11wrap/pk11cert.c index de02dd0c15..c96d1f5a42 100644 --- a/lib/pk11wrap/pk11cert.c +++ b/lib/pk11wrap/pk11cert.c @@ -512,7 +512,7 @@ find_certs_from_nickname(const char *nickname, void *wincx) { PRStatus status; NSSCertificate **certs = NULL; - NSSToken *token; + NSSToken *token = NULL; NSSTrustDomain *defaultTD = STAN_GetDefaultTrustDomain(); PK11SlotInfo *slot = NULL; SECStatus rv; @@ -539,7 +539,7 @@ find_certs_from_nickname(const char *nickname, void *wincx) *delimit = ':'; } else { slot = PK11_GetInternalKeySlot(); - token = PK11Slot_GetNSSToken(slot); + token = nssToken_AddRef(PK11Slot_GetNSSToken(slot)); } if (token) { nssList *certList; @@ -600,6 +600,9 @@ find_certs_from_nickname(const char *nickname, void *wincx) nssList_Destroy(certList); } loser: + if (token) { + nssToken_Destroy(token); + } if (slot) { PK11_FreeSlot(slot); } diff --git a/lib/pki/trustdomain.c b/lib/pki/trustdomain.c index 49f7dc5ba0..56bcaf8efd 100644 --- a/lib/pki/trustdomain.c +++ b/lib/pki/trustdomain.c @@ -248,8 +248,10 @@ NSSTrustDomain_FindTokenByName( tok = (NSSToken *)nssListIterator_Next(td->tokens)) { if (nssToken_IsPresent(tok)) { myName = nssToken_GetName(tok); - if (nssUTF8_Equal(tokenName, myName, &nssrv)) + if (nssUTF8_Equal(tokenName, myName, &nssrv)) { + tok = nssToken_AddRef(tok); break; + } } } nssListIterator_Finish(td->tokens);