mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-10 04:27:45 -05:00
term: don't print outside grid when printing multi-column characters
When auto-wrap is disabled, a multi-column character may be printed on a line that doesn't fit the entire character. That is, the "spacers" we print, as place holders in the columns after the first one, may reach outside the grid. We did (try to) check for this, but the check was off by one. Meaning, we could, in some cases, print outside the grid.
This commit is contained in:
parent
23ada09d14
commit
71ce17d977
2 changed files with 7 additions and 1 deletions
|
|
@ -61,6 +61,9 @@
|
|||
### Deprecated
|
||||
### Removed
|
||||
### Fixed
|
||||
|
||||
* Crash when printing double-width (or longer) characters to, or near,
|
||||
the last column, when auto-wrap (private mode 7) has been disabled.
|
||||
### Security
|
||||
### Contributors
|
||||
|
||||
|
|
|
|||
|
|
@ -3680,11 +3680,13 @@ term_print(struct terminal *term, char32_t wc, int width)
|
|||
grid_row_uri_range_erase(row, col, col + width - 1);
|
||||
|
||||
/* Advance cursor the 'additional' columns while dirty:ing the cells */
|
||||
for (int i = 1; i < width && col < term->cols; i++) {
|
||||
for (int i = 1; i < width && (col + 1) < term->cols; i++) {
|
||||
col++;
|
||||
print_spacer(term, col, width - i);
|
||||
}
|
||||
|
||||
xassert(col < term->cols);
|
||||
|
||||
/* Advance cursor */
|
||||
if (unlikely(++col >= term->cols)) {
|
||||
grid->cursor.lcf = true;
|
||||
|
|
@ -3726,6 +3728,7 @@ ascii_printer_fast(struct terminal *term, char32_t wc)
|
|||
|
||||
/* Advance cursor */
|
||||
if (unlikely(++col >= term->cols)) {
|
||||
xassert(col == term->cols);
|
||||
grid->cursor.lcf = true;
|
||||
col--;
|
||||
} else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue