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