Dmitry Timoshkov : user32: Make MDI get_client_info checks more strict.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jun 20 09:13:45 CDT 2007


Module: wine
Branch: master
Commit: ea2613fe6195fb4ac50a029204720a9bb1fa57f2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ea2613fe6195fb4ac50a029204720a9bb1fa57f2

Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date:   Wed Jun 20 19:37:05 2007 +0900

user32: Make MDI get_client_info checks more strict.

---

 dlls/user32/mdi.c |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/dlls/user32/mdi.c b/dlls/user32/mdi.c
index 0b488d2..51dd405 100644
--- a/dlls/user32/mdi.c
+++ b/dlls/user32/mdi.c
@@ -202,13 +202,15 @@ static MDICLIENTINFO *get_client_info( HWND client )
     WND *win = WIN_GetPtr( client );
     if (win)
     {
-        if (win == WND_OTHER_PROCESS)
+        if (win == WND_OTHER_PROCESS || win == WND_DESKTOP)
         {
-            if (IsWindow(client)) ERR( "client %p belongs to other process\n", client );
+            if (IsWindow(client)) WARN( "client %p belongs to other process\n", client );
             return NULL;
         }
-        if (win->cbWndExtra < sizeof(MDICLIENTINFO)) WARN( "%p is not an MDI client\n", client );
-        else ret = (MDICLIENTINFO *)win->wExtra;
+        if (win->flags & WIN_ISMDICLIENT)
+            ret = (MDICLIENTINFO *)win->wExtra;
+        else
+            WARN( "%p is not an MDI client\n", client );
         WIN_ReleasePtr( win );
     }
     return ret;
@@ -1040,7 +1042,17 @@ static LRESULT MDIClientWndProc_common( HWND hwnd, UINT message,
 
     TRACE("%p %04x (%s) %08lx %08lx\n", hwnd, message, SPY_GetMsgName(message, hwnd), wParam, lParam);
 
-    if (!(ci = get_client_info( hwnd ))) return 0;
+    if (!(ci = get_client_info( hwnd )))
+    {
+        if (message == WM_NCCREATE)
+        {
+            WND *wndPtr = WIN_GetPtr( hwnd );
+            wndPtr->flags |= WIN_ISMDICLIENT;
+            WIN_ReleasePtr( wndPtr );
+        }
+        return unicode ? DefWindowProcW( hwnd, message, wParam, lParam ) :
+                         DefWindowProcA( hwnd, message, wParam, lParam );
+    }
 
     switch (message)
     {
@@ -1051,8 +1063,6 @@ static LRESULT MDIClientWndProc_common( HWND hwnd, UINT message,
           LPCREATESTRUCTA cs = (LPCREATESTRUCTA)lParam;
           WND *wndPtr = WIN_GetPtr( hwnd );
 
-          wndPtr->flags |= WIN_ISMDICLIENT;
-
 	/* Translation layer doesn't know what's in the cs->lpCreateParams
 	 * so we have to keep track of what environment we're in. */
 




More information about the wine-cvs mailing list