From 00646c9db66a229931cac7ac4b87e0957ba00356 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:17:20 -0500 Subject: [PATCH] fix: handle empty event scenario in ipc callbacks (#48992) Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: deepak1556 --- shell/browser/electron_api_ipc_handler_impl.cc | 10 ++++++++++ shell/browser/electron_api_sw_ipc_handler_impl.cc | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/shell/browser/electron_api_ipc_handler_impl.cc b/shell/browser/electron_api_ipc_handler_impl.cc index 8847f5fa481f..9b742e968d4c 100644 --- a/shell/browser/electron_api_ipc_handler_impl.cc +++ b/shell/browser/electron_api_ipc_handler_impl.cc @@ -49,6 +49,8 @@ void ElectronApiIPCHandlerImpl::Message(bool internal, v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->Message(event_object, channel, std::move(arguments)); @@ -64,6 +66,8 @@ void ElectronApiIPCHandlerImpl::Invoke(bool internal, v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal, std::move(callback)); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->Invoke(event_object, channel, std::move(arguments)); @@ -78,6 +82,8 @@ void ElectronApiIPCHandlerImpl::ReceivePostMessage( v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), false); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->ReceivePostMessage(event_object, channel, @@ -95,6 +101,8 @@ void ElectronApiIPCHandlerImpl::MessageSync(bool internal, v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal, std::move(callback)); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->MessageSync(event_object, channel, std::move(arguments)); @@ -108,6 +116,8 @@ void ElectronApiIPCHandlerImpl::MessageHost(const std::string& channel, v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), false); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->MessageHost(event_object, channel, std::move(arguments)); diff --git a/shell/browser/electron_api_sw_ipc_handler_impl.cc b/shell/browser/electron_api_sw_ipc_handler_impl.cc index 23b3b9b551de..3e56307dde3a 100644 --- a/shell/browser/electron_api_sw_ipc_handler_impl.cc +++ b/shell/browser/electron_api_sw_ipc_handler_impl.cc @@ -76,6 +76,8 @@ void ElectronApiSWIPCHandlerImpl::Message(bool internal, v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->Message(event_object, channel, std::move(arguments)); @@ -92,6 +94,8 @@ void ElectronApiSWIPCHandlerImpl::Invoke(bool internal, v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal, std::move(callback)); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->Invoke(event_object, channel, std::move(arguments)); @@ -106,6 +110,8 @@ void ElectronApiSWIPCHandlerImpl::ReceivePostMessage( v8::Isolate* isolate = electron::JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), false); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->ReceivePostMessage(event_object, channel, @@ -123,6 +129,8 @@ void ElectronApiSWIPCHandlerImpl::MessageSync(bool internal, v8::HandleScope handle_scope(isolate); auto* event = MakeIPCEvent(isolate, session->Get(), internal, std::move(callback)); + if (!event) + return; v8::Local event_object = event->GetWrapper(isolate).ToLocalChecked(); session->Get()->MessageSync(event_object, channel, std::move(arguments));