From 9eb650c1cf71145c5edfd2dafeb42ce2cbf751bf Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Thu, 28 Nov 2024 19:22:15 +1300 Subject: [PATCH] Always check for errors when propagating task values. This could occur if a request is cancelled, without this it might not chain up to the original caller correctly. --- shell/platform/linux/fl_basic_message_channel.cc | 5 ++++- shell/platform/linux/fl_binary_messenger.cc | 5 ++++- shell/platform/linux/fl_method_channel.cc | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/shell/platform/linux/fl_basic_message_channel.cc b/shell/platform/linux/fl_basic_message_channel.cc index 7d2b5afe60a6a..5d23bd9d4984b 100644 --- a/shell/platform/linux/fl_basic_message_channel.cc +++ b/shell/platform/linux/fl_basic_message_channel.cc @@ -258,7 +258,10 @@ G_MODULE_EXPORT FlValue* fl_basic_message_channel_send_finish( g_return_val_if_fail(g_task_is_valid(result, self), nullptr); g_autoptr(GTask) task = G_TASK(result); - GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, nullptr)); + GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, error)); + if (r == nullptr) { + return nullptr; + } g_autoptr(GBytes) message = fl_binary_messenger_send_on_channel_finish(self->messenger, r, error); diff --git a/shell/platform/linux/fl_binary_messenger.cc b/shell/platform/linux/fl_binary_messenger.cc index 16dcd2b86bbc1..9dd08b02ff70c 100644 --- a/shell/platform/linux/fl_binary_messenger.cc +++ b/shell/platform/linux/fl_binary_messenger.cc @@ -291,7 +291,10 @@ static GBytes* send_on_channel_finish(FlBinaryMessenger* messenger, g_return_val_if_fail(g_task_is_valid(result, self), FALSE); g_autoptr(GTask) task = G_TASK(result); - GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, nullptr)); + GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, error)); + if (r == nullptr) { + return nullptr; + } g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine)); if (engine == nullptr) { diff --git a/shell/platform/linux/fl_method_channel.cc b/shell/platform/linux/fl_method_channel.cc index 266bfa7d812d7..e9f691aecbdb0 100644 --- a/shell/platform/linux/fl_method_channel.cc +++ b/shell/platform/linux/fl_method_channel.cc @@ -197,7 +197,10 @@ G_MODULE_EXPORT FlMethodResponse* fl_method_channel_invoke_method_finish( g_return_val_if_fail(g_task_is_valid(result, self), nullptr); g_autoptr(GTask) task = G_TASK(result); - GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, nullptr)); + GAsyncResult* r = G_ASYNC_RESULT(g_task_propagate_pointer(task, error)); + if (r == nullptr) { + return nullptr; + } g_autoptr(GBytes) response = fl_binary_messenger_send_on_channel_finish(self->messenger, r, error);