[PATCH 7/7] server: Check for internal messages before validating window handle.

Rémi Bernon rbernon at codeweavers.com
Fri Oct 15 04:48:02 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/user32/tests/win.c | 1 -
 server/queue.c          | 6 +++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index f128d15419d..b460416e89d 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -936,7 +936,6 @@ static void test_thread_exit_destroy(void)
     ret = IsWindow( child2 );
     ok( !ret, "IsWindow returned %u\n", ret );
     ret = IsWindow( child3 );
-    todo_wine
     ok( !ret, "IsWindow returned %u\n", ret );
     ret = DestroyWindow( child2 );
     ok( !ret, "DestroyWindow returned %u\n", ret );
diff --git a/server/queue.c b/server/queue.c
index fbbb230e6dc..5ef23996317 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2573,6 +2573,10 @@ DECL_HANDLER(get_message)
 
     reply->active_hooks = get_active_hooks();
 
+    /* first check for internal messages */
+    if (queue && get_queued_message( queue, SEND_MESSAGE, 0, 0x80000000, 0xffffffff, PM_REMOVE, reply ))
+        return;
+
     if (get_win && get_win != 1 && get_win != -1 && !get_user_object( get_win, USER_WINDOW ))
     {
         set_win32_error( ERROR_INVALID_WINDOW_HANDLE );
@@ -2584,7 +2588,7 @@ DECL_HANDLER(get_message)
     if (!filter) filter = QS_ALLINPUT;
 
     /* first check for sent messages */
-    if (get_queued_message( queue, SEND_MESSAGE, 0, 0, 0xffffffff, PM_REMOVE, reply ))
+    if (get_queued_message( queue, SEND_MESSAGE, 0, 0, 0x7fffffff, PM_REMOVE, reply ))
         return;
 
     /* clear changed bits so we can wait on them if we don't find a message */
-- 
2.33.0




More information about the wine-devel mailing list