From 251545203baa65364e491ddbe71ab3f8080bfe25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 22 Jul 2021 17:53:29 +0200 Subject: [PATCH 1/2] search: reset match state when selection is cancelled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While we’re in scrollback search mode, the selection may be cancelled (for example, if the application is scrolling out the selected text). Trying to e.g. extend the search selection after this has happened triggered a crash. This fixes it by simply resetting the search match state when the selection is cancelled. Closes #644 --- CHANGELOG.md | 3 +++ search.c | 7 +++++++ search.h | 2 ++ selection.c | 3 +++ 4 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index acb30d6f..c9dfdecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,9 @@ * Rendering into the right margin area with `tweak.overflowing-glyphs` enabled. * PGO builds with clang (https://codeberg.org/dnkl/foot/issues/642). +* Crash in scrollback search mode when selection has been canceled due + to terminal content updates + (https://codeberg.org/dnkl/foot/issues/644). ### Security diff --git a/search.c b/search.c index 8f28a656..2db66cc9 100644 --- a/search.c +++ b/search.c @@ -155,6 +155,13 @@ search_cancel(struct terminal *term) selection_cancel(term); } +void +search_selection_cancelled(struct terminal *term) +{ + term->search.match = (struct coord){-1, -1}; + term->search.match_len = 0; +} + static void search_update_selection(struct terminal *term, int start_row, int start_col, diff --git a/search.h b/search.h index 5db1610d..f4dfa5b9 100644 --- a/search.h +++ b/search.h @@ -11,3 +11,5 @@ void search_input( const xkb_keysym_t *raw_syms, size_t raw_count, uint32_t serial); void search_add_chars(struct terminal *term, const char *text, size_t len); + +void search_selection_cancelled(struct terminal *term); diff --git a/selection.c b/selection.c index 537614f6..95879445 100644 --- a/selection.c +++ b/selection.c @@ -21,6 +21,7 @@ #include "grid.h" #include "misc.h" #include "render.h" +#include "search.h" #include "uri.h" #include "util.h" #include "vt.h" @@ -1058,6 +1059,8 @@ selection_cancel(struct terminal *term) term->selection.pivot.end = (struct coord){-1, -1}; term->selection.direction = SELECTION_UNDIR; term->selection.ongoing = false; + + search_selection_cancelled(term); } bool From 7092a72ce4554ac8b5261eeb7a26182cda8f927e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 22 Jul 2021 17:57:25 +0200 Subject: [PATCH 2/2] search: redraw search box after selection has been cancelled --- search.c | 1 + 1 file changed, 1 insertion(+) diff --git a/search.c b/search.c index 2db66cc9..817f18b5 100644 --- a/search.c +++ b/search.c @@ -160,6 +160,7 @@ search_selection_cancelled(struct terminal *term) { term->search.match = (struct coord){-1, -1}; term->search.match_len = 0; + render_refresh_search(term); } static void