From f9256fa132e9d3c50ef1e1eafe2774160b38e063 Mon Sep 17 00:00:00 2001 From: Conner <72773002+XNUConner@users.noreply.github.com> Date: Sun, 22 May 2022 08:37:27 -0500 Subject: [PATCH] Fix PostEvent() segfault (#403) Fix segfault when PostEvent() called on inactive screen. Co-authored-by: ArthurSonzogni --- src/ftxui/component/screen_interactive.cpp | 10 +++++++--- src/ftxui/component/screen_interactive_test.cpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp index 8a7b4e08..674276f7 100644 --- a/src/ftxui/component/screen_interactive.cpp +++ b/src/ftxui/component/screen_interactive.cpp @@ -295,10 +295,14 @@ ScreenInteractive ScreenInteractive::FitComponent() { } void ScreenInteractive::Post(Task task) { - if (!quit_) { - task_sender_->Send(std::move(task)); - } + // Task/Events sent toward inactive screen or screen waiting to become + // inactive are dropped. + if (!task_sender_) + return; + + task_sender_->Send(std::move(task)); } + void ScreenInteractive::PostEvent(Event event) { Post(event); } diff --git a/src/ftxui/component/screen_interactive_test.cpp b/src/ftxui/component/screen_interactive_test.cpp index 9592d932..957e98b1 100644 --- a/src/ftxui/component/screen_interactive_test.cpp +++ b/src/ftxui/component/screen_interactive_test.cpp @@ -47,6 +47,20 @@ TEST(ScreenInteractive, Signal_SIGFPE) { TestSignal(SIGFPE); } +// Regression test for: +// https://github.com/ArthurSonzogni/FTXUI/issues/402 +TEST(ScreenInteractive, PostEventToNonActive) { + auto screen = ScreenInteractive::FitComponent(); + screen.Post(Event::Custom); +} + +// Regression test for: +// https://github.com/ArthurSonzogni/FTXUI/issues/402 +TEST(ScreenInteractive, PostTaskToNonActive) { + auto screen = ScreenInteractive::FitComponent(); + screen.Post([] {}); +} + } // namespace ftxui // Copyright 2021 Arthur Sonzogni. All rights reserved.