diff --git a/Libraries/LibIPC/IClientConnection.h b/Libraries/LibIPC/IClientConnection.h index b45de739a8..7e816b5dcd 100644 --- a/Libraries/LibIPC/IClientConnection.h +++ b/Libraries/LibIPC/IClientConnection.h @@ -128,6 +128,12 @@ public: shutdown(); } + void did_misbehave(const char* message) + { + dbg() << "Connection{" << this << "} (id=" << m_client_id << ", pid=" << m_client_pid << ") misbehaved (" << message << "), disconnecting."; + shutdown(); + } + void shutdown() { m_socket->close(); diff --git a/Servers/WindowServer/WSClientConnection.cpp b/Servers/WindowServer/WSClientConnection.cpp index c798dcc6ab..6b67f1217c 100644 --- a/Servers/WindowServer/WSClientConnection.cpp +++ b/Servers/WindowServer/WSClientConnection.cpp @@ -59,12 +59,6 @@ void WSClientConnection::die() s_connections->remove(client_id()); } -void WSClientConnection::post_error(const String& error_message) -{ - dbgprintf("WSClientConnection::post_error: client_id=%d: %s\n", client_id(), error_message.characters()); - did_misbehave(); -} - void WSClientConnection::notify_about_new_screen_rect(const Rect& rect) { post_message(WindowClient::ScreenRectChanged(rect)); @@ -88,8 +82,8 @@ OwnPtr WSClientConnection::handle(const Wi int menubar_id = message.menubar_id(); auto it = m_menubars.find(menubar_id); if (it == m_menubars.end()) { - post_error("WSAPIDestroyMenubarRequest: Bad menubar ID"); - return make(); + did_misbehave("DestroyMenubar: Bad menubar ID"); + return nullptr; } auto& menubar = *(*it).value; WSWindowManager::the().close_menubar(menubar); @@ -111,8 +105,8 @@ OwnPtr WSClientConnection::handle(const Windo int menu_id = message.menu_id(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - post_error("WSAPIDestroyMenuRequest: Bad menu ID"); - return make(); + did_misbehave("DestroyMenu: Bad menu ID"); + return nullptr; } auto& menu = *(*it).value; menu.close(); @@ -126,8 +120,8 @@ OwnPtr WSClientConnection::handle(c int menubar_id = message.menubar_id(); auto it = m_menubars.find(menubar_id); if (it == m_menubars.end()) { - post_error("WSAPISetApplicationMenubarRequest: Bad menubar ID"); - return make(); + did_misbehave("SetApplicationMenubar: Bad menubar ID"); + return nullptr; } auto& menubar = *(*it).value; m_app_menubar = menubar.make_weak_ptr(); @@ -142,12 +136,12 @@ OwnPtr WSClientConnection::handle(const auto it = m_menubars.find(menubar_id); auto jt = m_menus.find(menu_id); if (it == m_menubars.end()) { - post_error("WSAPIAddMenuToMenubarRequest: Bad menubar ID"); - return make(); + did_misbehave("AddMenuToMenubar: Bad menubar ID"); + return nullptr; } if (jt == m_menus.end()) { - post_error("WSAPIAddMenuToMenubarRequest: Bad menu ID"); - return make(); + did_misbehave("AddMenuToMenubar: Bad menu ID"); + return nullptr; } auto& menubar = *(*it).value; auto& menu = *(*jt).value; @@ -161,17 +155,15 @@ OwnPtr WSClientConnection::handle(const Windo unsigned identifier = message.identifier(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - dbg() << "WSAPIAddMenuItemRequest: Bad menu ID: " << menu_id; - return make(); + dbg() << "AddMenuItem: Bad menu ID: " << menu_id; + return nullptr; } auto& menu = *(*it).value; auto menu_item = make(menu, identifier, message.text(), message.shortcut(), message.enabled(), message.checkable(), message.checked()); if (message.icon_buffer_id() != -1) { auto icon_buffer = SharedBuffer::create_from_shared_buffer_id(message.icon_buffer_id()); - if (!icon_buffer) { - did_misbehave(); - return make(); - } + if (!icon_buffer) + return nullptr; // FIXME: Verify that the icon buffer can accomodate a 16x16 bitmap view. auto shared_icon = GraphicsBitmap::create_with_shared_buffer(GraphicsBitmap::Format::RGBA32, icon_buffer.release_nonnull(), { 16, 16 }); menu_item->set_icon(shared_icon); @@ -187,8 +179,8 @@ OwnPtr WSClientConnection::handle(const WindowS auto position = message.screen_position(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - post_error("WSAPIPopupMenuRequest: Bad menu ID"); - return make(); + did_misbehave("PopupMenu: Bad menu ID"); + return nullptr; } auto& menu = *(*it).value; menu.popup(position); @@ -200,8 +192,8 @@ OwnPtr WSClientConnection::handle(const Windo int menu_id = message.menu_id(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - post_error("WSAPIDismissMenuRequest: Bad menu ID"); - return make(); + did_misbehave("DismissMenu: Bad menu ID"); + return nullptr; } auto& menu = *(*it).value; menu.close(); @@ -213,14 +205,14 @@ OwnPtr WSClientConnection::handle(const Wi int menu_id = message.menu_id(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - post_error("WSAPIUpdateMenuItemRequest: Bad menu ID"); - return make(); + did_misbehave("UpdateMenuItem: Bad menu ID"); + return nullptr; } auto& menu = *(*it).value; auto* menu_item = menu.item_with_identifier(message.identifier()); if (!menu_item) { - post_error("WSAPIUpdateMenuItemRequest: Bad menu item identifier"); - return make(); + did_misbehave("UpdateMenuItem: Bad menu item identifier"); + return nullptr; } menu_item->set_text(message.text()); menu_item->set_shortcut_text(message.shortcut()); @@ -236,8 +228,8 @@ OwnPtr WSClientConnection::handle(const int menu_id = message.menu_id(); auto it = m_menus.find(menu_id); if (it == m_menus.end()) { - post_error("WSAPIAddMenuSeparatorRequest: Bad menu ID"); - return make(); + did_misbehave("AddMenuSeparator: Bad menu ID"); + return nullptr; } auto& menu = *(*it).value; menu.add_item(make(menu, WSMenuItem::Separator)); @@ -248,8 +240,8 @@ OwnPtr WSClientConnection::handle(const { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPIMoveWindowToFrontRequest: Bad window ID"); - return make(); + did_misbehave("MoveWindowToFront: Bad window ID"); + return nullptr; } WSWindowManager::the().move_to_front_and_make_active(*(*it).value); return make(); @@ -259,8 +251,8 @@ OwnPtr WSClientConnection::handle(const Win { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetFullscreenRequest: Bad window ID"); - return make(); + did_misbehave("SetFullscreen: Bad window ID"); + return nullptr; } it->value->set_fullscreen(message.fullscreen()); return make(); @@ -270,8 +262,8 @@ OwnPtr WSClientConnection::handle(const { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetWindowOpacityRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowOpacity: Bad window ID"); + return nullptr; } it->value->set_opacity(message.opacity()); return make(); @@ -299,8 +291,8 @@ OwnPtr WSClientConnection::handle(const Wi { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetWindowTitleRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowTitle: Bad window ID"); + return nullptr; } it->value->set_title(message.title()); return make(); @@ -310,8 +302,8 @@ OwnPtr WSClientConnection::handle(const Wi { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPIGetWindowTitleRequest: Bad window ID"); - return make(""); + did_misbehave("GetWindowTitle: Bad window ID"); + return nullptr; } return make(it->value->title()); } @@ -320,8 +312,8 @@ OwnPtr WSClientConnection::handle(con { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetWindowIconBitmapRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowIconBitmap: Bad window ID"); + return nullptr; } auto& window = *(*it).value; @@ -343,13 +335,13 @@ OwnPtr WSClientConnection::handle(const Win int window_id = message.window_id(); auto it = m_windows.find(window_id); if (it == m_windows.end()) { - post_error("WSAPISetWindowRectRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowRect: Bad window ID"); + return nullptr; } auto& window = *(*it).value; if (window.is_fullscreen()) { - dbgprintf("WSClientConnection: Ignoring SetWindowRect request for fullscreen window\n"); - return make(); + dbg() << "WSClientConnection: Ignoring SetWindowRect request for fullscreen window"; + return nullptr; } window.set_rect(message.rect()); window.request_update(message.rect()); @@ -361,8 +353,8 @@ OwnPtr WSClientConnection::handle(const Win int window_id = message.window_id(); auto it = m_windows.find(window_id); if (it == m_windows.end()) { - post_error("WSAPIGetWindowRectRequest: Bad window ID"); - return make(Rect()); + did_misbehave("GetWindowRect: Bad window ID"); + return nullptr; } return make(it->value->rect()); } @@ -371,8 +363,8 @@ OwnPtr WSClientConnection::handle(co { auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(message.shared_buffer_id()); if (!shared_buffer) { - post_error("WSAPISetClipboardContentsRequest: Bad shared buffer ID"); - return make(); + did_misbehave("SetClipboardContents: Bad shared buffer ID"); + return nullptr; } WSClipboard::the().set_data(*shared_buffer, message.content_size(), message.content_type()); return make(); @@ -423,8 +415,8 @@ OwnPtr WSClientConnection::handle(const Win { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPIDestroyWindowRequest: Bad window ID"); - return make(); + did_misbehave("DestroyWindow: Bad window ID"); + return nullptr; } auto& window = *(*it).value; WSWindowManager::the().invalidate(window); @@ -453,7 +445,7 @@ void WSClientConnection::handle(const WindowServer::InvalidateRect& message) { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPIInvalidateRectRequest: Bad window ID"); + did_misbehave("InvalidateRect: Bad window ID"); return; } auto& window = *(*it).value; @@ -466,7 +458,7 @@ void WSClientConnection::handle(const WindowServer::DidFinishPainting& message) int window_id = message.window_id(); auto it = m_windows.find(window_id); if (it == m_windows.end()) { - post_error("WSAPIDidFinishPaintingNotification: Bad window ID"); + did_misbehave("DidFinishPainting: Bad window ID"); return; } auto& window = *(*it).value; @@ -481,8 +473,8 @@ OwnPtr WSClientConnection::handle(c int window_id = message.window_id(); auto it = m_windows.find(window_id); if (it == m_windows.end()) { - post_error("WSAPISetWindowBackingStoreRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowBackingStore: Bad window ID"); + return nullptr; } auto& window = *(*it).value; if (window.last_backing_store() && window.last_backing_store()->shared_buffer_id() == message.shared_buffer_id()) { @@ -509,8 +501,8 @@ OwnPtr WSClientConnection::handle int window_id = message.window_id(); auto it = m_windows.find(window_id); if (it == m_windows.end()) { - post_error("WSAPISetGlobalCursorTrackingRequest: Bad window ID"); - return make(); + did_misbehave("SetGlobalCursorTracking: Bad window ID"); + return nullptr; } it->value->set_global_cursor_tracking_enabled(message.enabled()); return make(); @@ -520,8 +512,8 @@ OwnPtr WSClientConnection::handle { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetWindowOverrideCursorRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowOverrideCursor: Bad window ID"); + return nullptr; } auto& window = *(*it).value; window.set_override_cursor(WSCursor::create((WSStandardCursor)message.cursor_type())); @@ -532,8 +524,8 @@ OwnPtr WSClientConnection::handl { auto it = m_windows.find(message.window_id()); if (it == m_windows.end()) { - post_error("WSAPISetWindowHasAlphaChannelRequest: Bad window ID"); - return make(); + did_misbehave("SetWindowHasAlphaChannel: Bad window ID"); + return nullptr; } it->value->set_has_alpha_channel(message.has_alpha_channel()); return make(); @@ -543,12 +535,12 @@ void WSClientConnection::handle(const WindowServer::WM_SetActiveWindow& message) { auto* client = WSClientConnection::from_client_id(message.client_id()); if (!client) { - post_error("WSWMAPISetActiveWindowRequest: Bad client ID"); + did_misbehave("WM_SetActiveWindow: Bad client ID"); return; } auto it = client->m_windows.find(message.window_id()); if (it == client->m_windows.end()) { - post_error("WSWMAPISetActiveWindowRequest: Bad window ID"); + did_misbehave("WM_SetActiveWindow: Bad window ID"); return; } auto& window = *(*it).value; @@ -560,12 +552,12 @@ void WSClientConnection::handle(const WindowServer::WM_PopupWindowMenu& message) { auto* client = WSClientConnection::from_client_id(message.client_id()); if (!client) { - post_error("WSWMAPIPopupWindowMenuRequest: Bad client ID"); + did_misbehave("WM_PopupWindowMenu: Bad client ID"); return; } auto it = client->m_windows.find(message.window_id()); if (it == client->m_windows.end()) { - post_error("WSWMAPIPopupWindowMenuRequest: Bad window ID"); + did_misbehave("WM_PopupWindowMenu: Bad window ID"); return; } auto& window = *(*it).value; @@ -576,12 +568,12 @@ void WSClientConnection::handle(const WindowServer::WM_StartWindowResize& reques { auto* client = WSClientConnection::from_client_id(request.client_id()); if (!client) { - post_error("WSWMAPIStartWindowResizeRequest: Bad client ID"); + did_misbehave("WM_StartWindowResize: Bad client ID"); return; } auto it = client->m_windows.find(request.window_id()); if (it == client->m_windows.end()) { - post_error("WSWMAPIStartWindowResizeRequest: Bad window ID"); + did_misbehave("WM_StartWindowResize: Bad window ID"); return; } auto& window = *(*it).value; @@ -594,12 +586,12 @@ void WSClientConnection::handle(const WindowServer::WM_SetWindowMinimized& messa { auto* client = WSClientConnection::from_client_id(message.client_id()); if (!client) { - post_error("WSWMAPISetWindowMinimizedRequest: Bad client ID"); + did_misbehave("WM_SetWindowMinimized: Bad client ID"); return; } auto it = client->m_windows.find(message.window_id()); if (it == client->m_windows.end()) { - post_error("WSWMAPISetWindowMinimizedRequest: Bad window ID"); + did_misbehave("WM_SetWindowMinimized: Bad window ID"); return; } auto& window = *(*it).value; diff --git a/Servers/WindowServer/WSClientConnection.h b/Servers/WindowServer/WSClientConnection.h index 8c6444291f..f0898ac6ad 100644 --- a/Servers/WindowServer/WSClientConnection.h +++ b/Servers/WindowServer/WSClientConnection.h @@ -87,8 +87,6 @@ private: virtual OwnPtr handle(const WindowServer::DismissMenu&) override; virtual OwnPtr handle(const WindowServer::SetWindowIconBitmap&) override; - void post_error(const String&); - HashMap> m_windows; HashMap> m_menubars; HashMap> m_menus;