From 2c309227f1c20c23d75055935b4d705c275c3c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 9 Jan 2025 07:49:29 +0100 Subject: [PATCH] term: cursor_refresh(): don't try to dirty the grid if we don't have one If the compositor sends a keyboard enter event before our window has been mapped, foot crashes; the enter event triggers a cursor refresh (hollow -> non-hollow block cursor), which crashes since we haven't yet allocated a grid. Fix by no-op:ing the refresh if the window hasn't been configured yet. Closes #1910 --- CHANGELOG.md | 4 ++++ terminal.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87694630..be321556 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,10 @@ * 'flash' overlay (triggered by either `tput flash`, or enabling `bell.visual` and then sending `BEL` to the terminal) stuck when `colors.flash-alpha=1.0`. +* Crash when compositor sends a keyboard enter event before the foot + window has been mapped ([#1910][1910]). + +[1910]: https://codeberg.org/dnkl/foot/issues/1910 ### Security diff --git a/terminal.c b/terminal.c index 7b5a4d2d..e392c36d 100644 --- a/terminal.c +++ b/terminal.c @@ -515,6 +515,9 @@ term_arm_blink_timer(struct terminal *term) static void cursor_refresh(struct terminal *term) { + if (!term->window->is_configured) + return; + term->grid->cur_row->cells[term->grid->cursor.point.col].attrs.clean = 0; term->grid->cur_row->dirty = true; render_refresh(term);