From 04b44a827a2ec494995e6583fb398835cf887eb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Thu, 11 May 2023 22:00:22 +0200 Subject: [PATCH] LibThreading: Only run on_error callback when action wasn't canceled This mirrors the same UAF protection for event loops used by the on_complete callback. --- Userland/Libraries/LibThreading/BackgroundAction.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibThreading/BackgroundAction.h b/Userland/Libraries/LibThreading/BackgroundAction.h index 7ea18e1819..9376e7e996 100644 --- a/Userland/Libraries/LibThreading/BackgroundAction.h +++ b/Userland/Libraries/LibThreading/BackgroundAction.h @@ -100,13 +100,15 @@ private: error = result.release_error(); m_promise->cancel(Error::from_errno(ECANCELED)); - if (m_on_error) { + if (!m_canceled && m_on_error) { callback_scheduled = true; origin_event_loop->deferred_invoke([this, error = move(error)]() mutable { m_on_error(move(error)); remove_from_parent(); }); origin_event_loop->wake(); + } else if (m_on_error) { + m_on_error(move(error)); } }