[0.4.14][WIN32SS] Mask WndProc exceptions to hide all tickets linked to CORE-11915

my testcase: this allows opening an exe/dll with MsDepends (CORE-12052)
Unfortunately still necessary, luckily still effective
and also reliably hides a lot of other crashes due to uncaught exceptions

like done in all earlier releases since 0.4.3
cherry picked from commit bca25b10b4
This commit is contained in:
Thomas Faber 2017-07-30 10:58:32 +00:00 committed by Joachim Henze
parent 5d7dbc8a4e
commit 0fbebb8f73

View file

@ -1487,20 +1487,15 @@ IntCallWindowProcW(BOOL IsAnsiProc,
if (PreResult) goto Exit; if (PreResult) goto Exit;
if (!Dialog)
Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
else
{
_SEH2_TRY _SEH2_TRY
{ {
Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam); Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); ERR("Exception when calling Ansi WndProc %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
} }
_SEH2_END; _SEH2_END;
}
if (Hook && (MsgOverride || DlgOverride)) if (Hook && (MsgOverride || DlgOverride))
{ {
@ -1543,20 +1538,15 @@ IntCallWindowProcW(BOOL IsAnsiProc,
if (PreResult) goto Exit; if (PreResult) goto Exit;
if (!Dialog)
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
else
{
_SEH2_TRY _SEH2_TRY
{ {
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); ERR("Exception when calling unicode WndProc %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
} }
_SEH2_END; _SEH2_END;
}
if (Hook && (MsgOverride || DlgOverride)) if (Hook && (MsgOverride || DlgOverride))
{ {
@ -1637,20 +1627,15 @@ IntCallWindowProcA(BOOL IsAnsiProc,
if (PreResult) goto Exit; if (PreResult) goto Exit;
if (!Dialog)
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
else
{
_SEH2_TRY _SEH2_TRY
{ {
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); ERR("Exception when calling Ansi WndProc %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
} }
_SEH2_END; _SEH2_END;
}
if (Hook && (MsgOverride || DlgOverride)) if (Hook && (MsgOverride || DlgOverride))
{ {
@ -1700,20 +1685,15 @@ IntCallWindowProcA(BOOL IsAnsiProc,
if (PreResult) goto Exit; if (PreResult) goto Exit;
if (!Dialog)
Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam);
else
{
_SEH2_TRY _SEH2_TRY
{ {
Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam); Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); ERR("Exception when calling unicode WndProc %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
} }
_SEH2_END; _SEH2_END;
}
if (Hook && (MsgOverride || DlgOverride)) if (Hook && (MsgOverride || DlgOverride))
{ {