Module: wine Branch: master Commit: 9ed5c865e219d4d55ab1da32ccb8f7922343c092 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9ed5c865e219d4d55ab1da32cc...
Author: James Hawkins truiken@gmail.com Date: Wed Jun 13 11:26:04 2007 -0700
msi: Protect custom actions with a structured exception handler.
---
dlls/msi/Makefile.in | 2 +- dlls/msi/custom.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/msi/Makefile.in b/dlls/msi/Makefile.in index e81dd4c..6edb45f 100644 --- a/dlls/msi/Makefile.in +++ b/dlls/msi/Makefile.in @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = msi.dll IMPORTLIB = libmsi.$(IMPLIBEXT) -IMPORTS = urlmon wininet comctl32 shell32 shlwapi cabinet oleaut32 ole32 version user32 gdi32 advapi32 kernel32 +IMPORTS = urlmon wininet comctl32 shell32 shlwapi cabinet oleaut32 ole32 version user32 gdi32 advapi32 kernel32 ntdll DELAYIMPORTS = odbccp32 EXTRALIBS = -luuid
diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c index e516256..9170a7e 100644 --- a/dlls/msi/custom.c +++ b/dlls/msi/custom.c @@ -25,10 +25,12 @@ #include "winbase.h" #include "winerror.h" #include "msidefs.h" -#include "msipriv.h" #include "winuser.h" + +#include "msipriv.h" #include "wine/debug.h" #include "wine/unicode.h" +#include "wine/exception.h"
WINE_DEFAULT_DEBUG_CHANNEL(msi);
@@ -583,7 +585,19 @@ static DWORD WINAPI ACTION_CallDllFunction( const GUID *guid ) { TRACE("calling %s\n", debugstr_w( info->target ) ); handle_msi_break( info->target ); - r = fn( hPackage ); + + __TRY + { + r = fn( hPackage ); + } + __EXCEPT_PAGE_FAULT + { + ERR("Custom action (%s:%s) caused a page fault: %08x\n", + debugstr_w(info->source), debugstr_w(info->target), GetExceptionCode()); + r = ERROR_SUCCESS; + } + __ENDTRY; + MsiCloseHandle( hPackage ); } else