diff --git a/Userland/Libraries/LibIPC/Message.cpp b/Userland/Libraries/LibIPC/Message.cpp index 0e8889c2a0..a6fe8c7212 100644 --- a/Userland/Libraries/LibIPC/Message.cpp +++ b/Userland/Libraries/LibIPC/Message.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -14,7 +15,12 @@ using MessageSizeType = u32; ErrorOr MessageBuffer::transfer_message(Core::LocalSocket& fd_passing_socket, Core::LocalSocket& data_socket) { - MessageSizeType message_size = data.size(); + Checked checked_message_size { data.size() }; + + if (checked_message_size.has_overflow()) + return Error::from_string_literal("Message is too large for IPC encoding"); + + auto message_size = checked_message_size.value(); TRY(data.try_prepend(reinterpret_cast(&message_size), sizeof(message_size))); for (auto const& fd : fds)