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