diff --git a/CHANGELOG.md b/CHANGELOG.md index d0a7bc13..f15f47d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,6 +133,8 @@ * Regression where `+shift+tab` always produced `\E[Z` instead of the correct `\E[27;;9~` sequence (https://codeberg.org/dnkl/foot/issues/547). +* Crash when a line wrapping OSC-8 URI crossed the scrollback wrap + around (https://codeberg.org/dnkl/foot/issues/552). ### Security diff --git a/terminal.c b/terminal.c index 06eac0d6..8a7dd826 100644 --- a/terminal.c +++ b/terminal.c @@ -3084,7 +3084,7 @@ term_osc8_close(struct terminal *term) int r = start.row; int start_col = start.col; - do { + while (true) { int end_col = r == end.row ? end.col : term->cols - 1; struct row *row = term->grid->rows[r]; @@ -3121,7 +3121,13 @@ term_osc8_close(struct terminal *term) } #endif start_col = 0; - } while (r++ != end.row); + + if (r == end.row) + break; + + r++; + r &= term->grid->num_rows - 1; + } done: free(term->vt.osc8.uri);