Module: wine Branch: master Commit: 803fc6e27c2507a2cefe57d53bdbaab1770f3854 URL: http://source.winehq.org/git/wine.git/?a=commit;h=803fc6e27c2507a2cefe57d53b...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Sep 24 13:41:20 2012 +0200
winex11: Add window data structure locking to the SysCommand entry point.
---
dlls/winex11.drv/window.c | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 4ff3678..66588d1 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2397,8 +2397,8 @@ LRESULT CDECL X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam ) int dir; struct x11drv_win_data *data;
- if (!(data = X11DRV_get_win_data( hwnd ))) return -1; - if (!data->whole_window || !data->managed || !data->mapped) return -1; + if (!(data = get_win_data( hwnd ))) return -1; + if (!data->whole_window || !data->managed || !data->mapped) goto failed;
switch (wparam & 0xfff0) { @@ -2408,7 +2408,7 @@ LRESULT CDECL X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam ) break; case SC_SIZE: /* windows without WS_THICKFRAME are not resizable through the window manager */ - if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_THICKFRAME)) return -1; + if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_THICKFRAME)) goto failed;
switch (hittest) { @@ -2427,24 +2427,30 @@ LRESULT CDECL X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam ) case SC_KEYMENU: /* prevent a simple ALT press+release from activating the system menu, * as that can get confusing on managed windows */ - if ((WCHAR)lparam) return -1; /* got an explicit char */ - if (GetMenu( hwnd )) return -1; /* window has a real menu */ - if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_SYSMENU)) return -1; /* no system menu */ + if ((WCHAR)lparam) goto failed; /* got an explicit char */ + if (GetMenu( hwnd )) goto failed; /* window has a real menu */ + if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_SYSMENU)) goto failed; /* no system menu */ TRACE( "ignoring SC_KEYMENU wp %lx lp %lx\n", wparam, lparam ); + release_win_data( data ); return 0;
default: - return -1; + goto failed; }
- if (IsZoomed(hwnd)) return -1; + if (IsZoomed(hwnd)) goto failed;
if (!is_netwm_supported( data->display, x11drv_atom(_NET_WM_MOVERESIZE) )) { TRACE( "_NET_WM_MOVERESIZE not supported\n" ); - return -1; + goto failed; }
+ release_win_data( data ); move_resize_window( hwnd, dir ); return 0; + +failed: + release_win_data( data ); + return -1; }