From 8e68b5478721e2fd996997b30b3d2bca0cb7d0f2 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 5 Oct 2004 22:33:22 +0000 Subject: [PATCH] Prevent DispatchMessage from dispatching a message to a different thread (reported by Dmitry Timoshkov). --- windows/message.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/windows/message.c b/windows/message.c index 84bef3b1e94..8fdf60bd964 100644 --- a/windows/message.c +++ b/windows/message.c @@ -777,9 +777,14 @@ LONG WINAPI DispatchMessageA( const MSG* msg ) } if (wndPtr == WND_OTHER_PROCESS) { - if (IsWindow( msg->hwnd )) - ERR( "cannot dispatch msg to other process window %p\n", msg->hwnd ); - SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + if (IsWindow( msg->hwnd )) SetLastError( ERROR_MESSAGE_SYNC_ONLY ); + else SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return 0; + } + if (wndPtr->tid != GetCurrentThreadId()) + { + SetLastError( ERROR_MESSAGE_SYNC_ONLY ); + WIN_ReleasePtr( wndPtr ); return 0; } if (!(winproc = wndPtr->winproc)) @@ -869,9 +874,14 @@ LONG WINAPI DispatchMessageW( const MSG* msg ) } if (wndPtr == WND_OTHER_PROCESS) { - if (IsWindow( msg->hwnd )) - ERR( "cannot dispatch msg to other process window %p\n", msg->hwnd ); - SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + if (IsWindow( msg->hwnd )) SetLastError( ERROR_MESSAGE_SYNC_ONLY ); + else SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return 0; + } + if (wndPtr->tid != GetCurrentThreadId()) + { + SetLastError( ERROR_MESSAGE_SYNC_ONLY ); + WIN_ReleasePtr( wndPtr ); return 0; } if (!(winproc = wndPtr->winproc)) -- 2.11.4.GIT