[User32]
authorJames Tabor <james.tabor@reactos.org>
Mon, 31 Oct 2016 01:18:43 +0000 (01:18 +0000)
committerJames Tabor <james.tabor@reactos.org>
Mon, 31 Oct 2016 01:18:43 +0000 (01:18 +0000)
- Leave Dialog Procedure calls protected with SEH, the same as windows.
- See CORE-12182, CORE-12111 and related issues.

svn path=/trunk/; revision=73088

reactos/win32ss/user/user32/windows/message.c

index c064fe1..a5ccb2d 100644 (file)
@@ -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)
       {