From 0ff09d4f745c6418420a9224ee0f2587d806900c Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 2 Jun 2021 21:21:57 -0600 Subject: [PATCH] WindowServer: Add sanity checks to `create_window` IPC --- Userland/Services/WindowServer/ClientConnection.cpp | 8 +++++++- Userland/Services/WindowServer/Window.cpp | 3 ++- Userland/Services/WindowServer/WindowType.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Userland/Services/WindowServer/ClientConnection.cpp b/Userland/Services/WindowServer/ClientConnection.cpp index a630230906..20d1985cdc 100644 --- a/Userland/Services/WindowServer/ClientConnection.cpp +++ b/Userland/Services/WindowServer/ClientConnection.cpp @@ -465,6 +465,11 @@ Messages::WindowServer::CreateWindowResponse ClientConnection::create_window(Gfx } } + if (type < 0 || type >= (i32)WindowType::_Count) { + did_misbehave("CreateWindow with a bad type"); + return nullptr; + } + int window_id = m_next_window_id++; auto window = Window::construct(*this, (WindowType)type, window_id, modal, minimizable, frameless, resizable, fullscreen, accessory, parent_window); @@ -492,7 +497,8 @@ Messages::WindowServer::CreateWindowResponse ClientConnection::create_window(Gfx window->set_alpha_hit_threshold(alpha_hit_threshold); window->set_size_increment(size_increment); window->set_base_size(base_size); - window->set_resize_aspect_ratio(resize_aspect_ratio); + if (resize_aspect_ratio.has_value() && !resize_aspect_ratio.value().is_null()) + window->set_resize_aspect_ratio(resize_aspect_ratio); window->invalidate(true, true); if (window->type() == WindowType::Applet) AppletManager::the().add_applet(*window); diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index 09d6da2ec3..8eba0a07e2 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -208,7 +208,8 @@ void Window::nudge_into_desktop(bool force_titlebar_visible) void Window::set_minimum_size(const Gfx::IntSize& size) { - VERIFY(!size.is_empty()); + if (size.is_null()) + return; if (m_minimum_size == size) return; diff --git a/Userland/Services/WindowServer/WindowType.h b/Userland/Services/WindowServer/WindowType.h index 59c28c690f..49e89cabd6 100644 --- a/Userland/Services/WindowServer/WindowType.h +++ b/Userland/Services/WindowServer/WindowType.h @@ -20,6 +20,7 @@ enum class WindowType { Desktop, ToolWindow, AppletArea, + _Count }; }