From: James Tabor Date: Mon, 31 Oct 2016 01:18:43 +0000 (+0000) Subject: [User32] X-Git-Tag: ReactOS-0.4.4-FOSDEM2017~441 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=07bc9a400d1c84f5084274decd4c11daec7155b5 [User32] - Leave Dialog Procedure calls protected with SEH, the same as windows. - See CORE-12182, CORE-12111 and related issues. svn path=/trunk/; revision=73088 --- diff --git a/reactos/win32ss/user/user32/windows/message.c b/reactos/win32ss/user/user32/windows/message.c index c064fe10fe7..a5ccb2db95a 100644 --- a/reactos/win32ss/user/user32/windows/message.c +++ b/reactos/win32ss/user/user32/windows/message.c @@ -934,6 +934,7 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg) /* Ansi string might contain MBCS chars so we need 2 * the number of chars */ AnsiMsg->lParam = (LPARAM) RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, UnicodeMsg->wParam * 2); //ERR("WM_GETTEXT U2A Size %d\n",AnsiMsg->wParam); + if (!AnsiMsg->lParam) return FALSE; break; } @@ -1463,7 +1464,20 @@ IntCallWindowProcW(BOOL IsAnsiProc, if (PreResult) goto Exit; + if (!Dialog) Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam); + else + { + _SEH2_TRY + { + Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); + } + _SEH2_END; + } if (Hook && MsgOverride) { @@ -1504,7 +1518,20 @@ IntCallWindowProcW(BOOL IsAnsiProc, if (PreResult) goto Exit; + if (!Dialog) Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); + else + { + _SEH2_TRY + { + Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); + } + _SEH2_END; + } if (Hook && MsgOverride) { @@ -1584,7 +1611,20 @@ IntCallWindowProcA(BOOL IsAnsiProc, if (PreResult) goto Exit; + if (!Dialog) Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); + else + { + _SEH2_TRY + { + Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); + } + _SEH2_END; + } if (Hook && MsgOverride) { @@ -1632,7 +1672,20 @@ IntCallWindowProcA(BOOL IsAnsiProc, if (PreResult) goto Exit; + if (!Dialog) Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam); + else + { + _SEH2_TRY + { + Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); + } + _SEH2_END; + } if (Hook && MsgOverride) {