Hans Leidekker : msi: Fix a memory leak (valgrind).
Alexandre Julliard
julliard at winehq.org
Thu Apr 14 11:58:21 CDT 2011
Module: wine
Branch: master
Commit: 741b0f37f8c274cd3d4206e8ddf9d3aee74f66c1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=741b0f37f8c274cd3d4206e8ddf9d3aee74f66c1
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Apr 14 14:40:15 2011 +0200
msi: Fix a memory leak (valgrind).
---
dlls/msi/msi.c | 25 ++++++++++++++++++-------
1 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index def9e72..4a79daf 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -2395,25 +2395,36 @@ HRESULT WINAPI MsiGetFileSignatureInformationW( LPCWSTR path, DWORD flags, PCCER
data.dwProvFlags = 0;
data.dwUIContext = WTD_UICONTEXT_INSTALL;
hr = WinVerifyTrustEx( INVALID_HANDLE_VALUE, &generic_verify_v2, &data );
- if (FAILED(hr)) return hr;
+ if (FAILED(hr)) goto done;
- signer = WTHelperGetProvSignerFromChain( data.hWVTStateData, 0, FALSE, 0 );
- if (!signer) return TRUST_E_NOSIGNATURE;
+ if (!(signer = WTHelperGetProvSignerFromChain( data.hWVTStateData, 0, FALSE, 0 )))
+ {
+ hr = TRUST_E_NOSIGNATURE;
+ goto done;
+ }
if (hash)
{
DWORD len = signer->psSigner->EncryptedHash.cbData;
if (*hashlen < len)
{
*hashlen = len;
- return HRESULT_FROM_WIN32(ERROR_MORE_DATA);
+ hr = HRESULT_FROM_WIN32(ERROR_MORE_DATA);
+ goto done;
}
memcpy( hash, signer->psSigner->EncryptedHash.pbData, len );
*hashlen = len;
}
- provider = WTHelperGetProvCertFromChain( signer, 0 );
- if (!provider) return TRUST_E_PROVIDER_UNKNOWN;
+ if (!(provider = WTHelperGetProvCertFromChain( signer, 0 )))
+ {
+ hr = TRUST_E_PROVIDER_UNKNOWN;
+ goto done;
+ }
*cert = CertDuplicateCertificateContext( provider->pCert );
- return S_OK;
+
+done:
+ data.dwStateAction = WTD_STATEACTION_CLOSE;
+ WinVerifyTrustEx( INVALID_HANDLE_VALUE, &generic_verify_v2, &data );
+ return hr;
}
/******************************************************************
More information about the wine-cvs
mailing list