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/message.c?rev=73088&r1=73087&r2=73088&view=diff
==============================================================================
--- 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)
       {


Reply via email to