mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
WindowServer: Avoid window
nullptr exception
If `window` is nullptr, we should return as soon as possible to avoid segment fault runtime error.
This commit is contained in:
parent
30be638fb2
commit
bb39f70efc
Notes:
sideshowbarker
2024-07-17 05:51:18 +09:00
Author: https://github.com/leeight Commit: https://github.com/SerenityOS/serenity/commit/bb39f70efc Pull-request: https://github.com/SerenityOS/serenity/pull/15563 Reviewed-by: https://github.com/AtkinsSJ Reviewed-by: https://github.com/linusg
1 changed files with 39 additions and 19 deletions
|
@ -1277,17 +1277,23 @@ void ConnectionFromClient::set_flash_flush(bool enabled)
|
|||
|
||||
void ConnectionFromClient::set_window_parent_from_client(i32 client_id, i32 parent_id, i32 child_id)
|
||||
{
|
||||
auto child_window = window_from_id(child_id);
|
||||
if (!child_window)
|
||||
auto* child_window = window_from_id(child_id);
|
||||
if (!child_window) {
|
||||
did_misbehave("SetWindowParentFromClient: Bad child window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
auto client_connection = from_client_id(client_id);
|
||||
if (!client_connection)
|
||||
auto* client_connection = from_client_id(client_id);
|
||||
if (!client_connection) {
|
||||
did_misbehave("SetWindowParentFromClient: Bad client ID");
|
||||
return;
|
||||
}
|
||||
|
||||
auto parent_window = client_connection->window_from_id(parent_id);
|
||||
if (!parent_window)
|
||||
auto* parent_window = client_connection->window_from_id(parent_id);
|
||||
if (!parent_window) {
|
||||
did_misbehave("SetWindowParentFromClient: Bad parent window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
if (parent_window->is_stealable_by_client(this->client_id())) {
|
||||
child_window->set_parent_window(*parent_window);
|
||||
|
@ -1298,34 +1304,44 @@ void ConnectionFromClient::set_window_parent_from_client(i32 client_id, i32 pare
|
|||
|
||||
Messages::WindowServer::GetWindowRectFromClientResponse ConnectionFromClient::get_window_rect_from_client(i32 client_id, i32 window_id)
|
||||
{
|
||||
auto client_connection = from_client_id(client_id);
|
||||
if (!client_connection)
|
||||
auto* client_connection = from_client_id(client_id);
|
||||
if (!client_connection) {
|
||||
did_misbehave("GetWindowRectFromClient: Bad client ID");
|
||||
return { Gfx::IntRect() };
|
||||
}
|
||||
|
||||
auto window = client_connection->window_from_id(window_id);
|
||||
if (!window)
|
||||
auto* window = client_connection->window_from_id(window_id);
|
||||
if (!window) {
|
||||
did_misbehave("GetWindowRectFromClient: Bad window ID");
|
||||
return { Gfx::IntRect() };
|
||||
}
|
||||
|
||||
return window->rect();
|
||||
}
|
||||
|
||||
void ConnectionFromClient::add_window_stealing_for_client(i32 client_id, i32 window_id)
|
||||
{
|
||||
auto window = window_from_id(window_id);
|
||||
if (!window)
|
||||
auto* window = window_from_id(window_id);
|
||||
if (!window) {
|
||||
did_misbehave("AddWindowStealingForClient: Bad window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!from_client_id(client_id))
|
||||
if (!from_client_id(client_id)) {
|
||||
did_misbehave("AddWindowStealingForClient: Bad client ID");
|
||||
return;
|
||||
}
|
||||
|
||||
window->add_stealing_for_client(client_id);
|
||||
}
|
||||
|
||||
void ConnectionFromClient::remove_window_stealing_for_client(i32 client_id, i32 window_id)
|
||||
{
|
||||
auto window = window_from_id(window_id);
|
||||
if (!window)
|
||||
auto* window = window_from_id(window_id);
|
||||
if (!window) {
|
||||
did_misbehave("RemoveWindowStealingForClient: Bad window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't check if the client exists, it may have died
|
||||
|
||||
|
@ -1334,18 +1350,22 @@ void ConnectionFromClient::remove_window_stealing_for_client(i32 client_id, i32
|
|||
|
||||
void ConnectionFromClient::remove_window_stealing(i32 window_id)
|
||||
{
|
||||
auto window = window_from_id(window_id);
|
||||
if (!window)
|
||||
auto* window = window_from_id(window_id);
|
||||
if (!window) {
|
||||
did_misbehave("RemoveWindowStealing: Bad window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
window->remove_all_stealing();
|
||||
}
|
||||
|
||||
void ConnectionFromClient::set_always_on_top(i32 window_id, bool always_on_top)
|
||||
{
|
||||
auto window = window_from_id(window_id);
|
||||
if (!window)
|
||||
auto* window = window_from_id(window_id);
|
||||
if (!window) {
|
||||
did_misbehave("SetAlwaysOnTop: Bad window ID");
|
||||
return;
|
||||
}
|
||||
|
||||
window->set_always_on_top(always_on_top);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue