https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4b4baf5cb8a54717897be1...
commit 4b4baf5cb8a54717897be122c8bfe5feab4f70ea Author: winesync ros-dev@reactos.org AuthorDate: Sun Mar 13 00:08:17 2022 +0100 Commit: Mark Jansen mark.jansen@reactos.org CommitDate: Sun Mar 20 19:28:04 2022 +0100
[WINESYNC] msi: Fix memory leaks.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
wine commit id 965ca1b4de78600366cde437c97a7208a954b18b by Hans Leidekker hans@codeweavers.com --- dll/win32/msi/custom.c | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-)
diff --git a/dll/win32/msi/custom.c b/dll/win32/msi/custom.c index caa379b416d..25c90a9fde0 100644 --- a/dll/win32/msi/custom.c +++ b/dll/win32/msi/custom.c @@ -553,46 +553,49 @@ UINT CDECL __wine_msi_call_dll_function(const GUID *guid) if (r != ERROR_SUCCESS) return r;
+ hPackage = alloc_msi_remote_handle( remote_package ); + if (!hPackage) + { + ERR( "failed to create handle for %x\n", remote_package ); + midl_user_free( dll ); + midl_user_free( proc ); + return ERROR_INSTALL_FAILURE; + } + hModule = LoadLibraryW( dll ); if (!hModule) { ERR( "failed to load dll %s (%u)\n", debugstr_w( dll ), GetLastError() ); + midl_user_free( dll ); + midl_user_free( proc ); + MsiCloseHandle( hPackage ); return ERROR_SUCCESS; }
fn = (MsiCustomActionEntryPoint) GetProcAddress( hModule, proc ); - if (fn) + if (!fn) WARN( "GetProcAddress(%s) failed\n", debugstr_a(proc) ); + else { - hPackage = alloc_msi_remote_handle( remote_package ); - if (hPackage) + handle_msi_break(proc); + + __TRY { - TRACE("calling %s\n", debugstr_a(proc)); - handle_msi_break(proc); - - __TRY - { - r = custom_proc_wrapper(fn, hPackage); - } - __EXCEPT_PAGE_FAULT - { - ERR("Custom action (%s:%s) caused a page fault: %08x\n", - debugstr_w(dll), debugstr_a(proc), GetExceptionCode()); - r = ERROR_SUCCESS; - } - __ENDTRY; - - MsiCloseHandle( hPackage ); + r = custom_proc_wrapper( fn, hPackage ); } - else - ERR("failed to create handle for %x\n", remote_package ); + __EXCEPT_PAGE_FAULT + { + ERR( "Custom action (%s:%s) caused a page fault: %08x\n", + debugstr_w(dll), debugstr_a(proc), GetExceptionCode() ); + r = ERROR_SUCCESS; + } + __ENDTRY; } - else - ERR("GetProcAddress(%s) failed\n", debugstr_a(proc));
FreeLibrary(hModule);
midl_user_free(dll); midl_user_free(proc); + MsiCloseHandle(hPackage);
return r; }