Fix PostEvent() segfault (#403)

Fix segfault when PostEvent() called on inactive screen.

Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
Conner 2022-05-22 08:37:27 -05:00 committed by GitHub
parent c033ca61ae
commit f9256fa132
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 3 deletions

View File

@ -295,10 +295,14 @@ ScreenInteractive ScreenInteractive::FitComponent() {
} }
void ScreenInteractive::Post(Task task) { void ScreenInteractive::Post(Task task) {
if (!quit_) { // Task/Events sent toward inactive screen or screen waiting to become
// inactive are dropped.
if (!task_sender_)
return;
task_sender_->Send(std::move(task)); task_sender_->Send(std::move(task));
}
} }
void ScreenInteractive::PostEvent(Event event) { void ScreenInteractive::PostEvent(Event event) {
Post(event); Post(event);
} }

View File

@ -47,6 +47,20 @@ TEST(ScreenInteractive, Signal_SIGFPE) {
TestSignal(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 } // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.