Module: wine Branch: master Commit: 8cd7abf1be287af002e742cf2a06a0d83364baa4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8cd7abf1be287af002e742cf2a...
Author: Juan Lang juan.lang@gmail.com Date: Thu Aug 30 17:50:23 2007 -0700
crypt32: Properly reference count certificate contexts referenced by a chain.
---
dlls/crypt32/chain.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c index f1711ac..6584085 100644 --- a/dlls/crypt32/chain.c +++ b/dlls/crypt32/chain.c @@ -250,7 +250,7 @@ static BOOL CRYPT_AddCertToSimpleChain(PCERT_SIMPLE_CHAIN chain, { memset(element, 0, sizeof(CERT_CHAIN_ELEMENT)); element->cbSize = sizeof(CERT_CHAIN_ELEMENT); - element->pCertContext = cert; + element->pCertContext = CertDuplicateCertificateContext(cert); if (dwFlags & CERT_STORE_REVOCATION_FLAG && !(dwFlags & CERT_STORE_NO_CRL_FLAG)) element->TrustStatus.dwErrorStatus |= CERT_TRUST_IS_REVOKED; @@ -288,12 +288,18 @@ static BOOL CRYPT_AddCertToSimpleChain(PCERT_SIMPLE_CHAIN chain, return ret; }
+static void CRYPT_FreeChainElement(PCERT_CHAIN_ELEMENT element) +{ + CertFreeCertificateContext(element->pCertContext); + CryptMemFree(element); +} + static void CRYPT_FreeSimpleChain(PCERT_SIMPLE_CHAIN chain) { DWORD i;
for (i = 0; i < chain->cElement; i++) - CryptMemFree(chain->rgpElement[i]); + CRYPT_FreeChainElement(chain->rgpElement[i]); CryptMemFree(chain->rgpElement); CryptMemFree(chain); }