From a9cc61224d7a58d2f83473b8c09a88e63b9a9c5b Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Tue, 21 Mar 2023 21:57:08 -0400 Subject: [PATCH] LibGUI: Resolve use-after-free error Objects taken by reference are no longer valid when used in `deferred_invoke`. Explicitly copying them solve the issue. --- Userland/Libraries/LibGUI/FileSystemModel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGUI/FileSystemModel.cpp b/Userland/Libraries/LibGUI/FileSystemModel.cpp index 8ca43ac867..a9207ac449 100644 --- a/Userland/Libraries/LibGUI/FileSystemModel.cpp +++ b/Userland/Libraries/LibGUI/FileSystemModel.cpp @@ -729,7 +729,7 @@ bool FileSystemModel::fetch_thumbnail_for(Node const& node) auto const on_error = [path, update_progress](Error error) -> void { // Note: We need to defer that to avoid the function removing its last reference // i.e. trying to destroy itself, which is prohibited. - Core::EventLoop::current().deferred_invoke([&] { + Core::EventLoop::current().deferred_invoke([path, error = Error::copy(error)]() mutable { s_thumbnail_cache.with_locked([path, error = move(error)](auto& cache) { if (error != Error::from_errno(ECANCELED)) { cache.thumbnail_cache.set(path, nullptr);