Author: jimtabor Date: Mon Oct 31 01:18:43 2016 New Revision: 73088
URL: http://svn.reactos.org/svn/reactos?rev=73088&view=rev Log: [User32] - Leave Dialog Procedure calls protected with SEH, the same as windows. - See CORE-12182, CORE-12111 and related issues.
Modified: trunk/reactos/win32ss/user/user32/windows/message.c
Modified: trunk/reactos/win32ss/user/user32/windows/message.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/windows... ============================================================================== --- trunk/reactos/win32ss/user/user32/windows/message.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/user32/windows/message.c [iso-8859-1] Mon Oct 31 01:18:43 2016 @@ -934,6 +934,7 @@ /* 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 @@
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 @@
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 @@
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 @@
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) {