[1/3] user32: Add an invalid window check to SetFocus.

Dmitry Timoshkov dmitry at baikal.ru
Thu Jan 5 03:58:06 CST 2012


---
 dlls/user32/focus.c     |    5 +++++
 dlls/user32/tests/msg.c |    3 +--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/focus.c b/dlls/user32/focus.c
index 81169db..9fdae25 100644
--- a/dlls/user32/focus.c
+++ b/dlls/user32/focus.c
@@ -259,6 +259,11 @@ HWND WINAPI SetFocus( HWND hwnd )
     {
         /* Check if we can set the focus to this window */
         hwnd = WIN_GetFullHandle( hwnd );
+        if (!IsWindow( hwnd ))
+        {
+            SetLastError( ERROR_INVALID_WINDOW_HANDLE );
+            return 0;
+        }
         if (hwnd == previous) return previous;  /* nothing to do */
         for (;;)
         {
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index c14fc04..6fa4d10 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -13573,10 +13573,9 @@ static void test_SetFocus(void)
 
     SetLastError(0xdeadbeef);
     old_focus = SetFocus((HWND)0xdeadbeef);
-todo_wine
     ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "expected ERROR_INVALID_WINDOW_HANDLE, got %d\n", GetLastError());
     while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
-    ok_sequence(WmEmptySeq, "SetFocus on an invalid window", TRUE);
+    ok_sequence(WmEmptySeq, "SetFocus on an invalid window", FALSE);
     ok(old_focus == 0, "expected old focus 0, got %p\n", old_focus);
     ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
     ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
-- 
1.7.7.4




More information about the wine-patches mailing list