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/window…
==============================================================================
--- 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)
{