diff --git a/csi.c b/csi.c index 558c2dc2..494ac957 100644 --- a/csi.c +++ b/csi.c @@ -1924,26 +1924,27 @@ csi_dispatch(struct terminal *term, uint8_t final) } case 'x': { /* DECFRA */ - const char c = vt_param_get(term, 0, 0); - if (likely((c >= 32 && c < 126) || - (c >= 160 && c <= 255))) + const uint8_t c = vt_param_get(term, 0, 0); + + if (unlikely(!((c >= 32 && c < 126) || c >= 160))) + break; + + int top, left, bottom, right; + if (!params_to_rectangular_area( + term, 1, &top, &left, &bottom, &right)) { - int top, left, bottom, right; - if (!params_to_rectangular_area( - term, 1, &top, &left, &bottom, &right)) - { - break; - } - - /* Erase the entire region at once (MUCH cheaper than - * doing it row by row, or even character by - * character). */ - sixel_overwrite_by_rectangle( - term, top, left, bottom - top + 1, right - left + 1); - - for (int r = top; r <= bottom; r++) - term_fill(term, r, left, c, right - left + 1, true); + break; } + + /* Erase the entire region at once (MUCH cheaper than + * doing it row by row, or even character by + * character). */ + sixel_overwrite_by_rectangle( + term, top, left, bottom - top + 1, right - left + 1); + + for (int r = top; r <= bottom; r++) + term_fill(term, r, left, c, right - left + 1, true); + break; } diff --git a/terminal.c b/terminal.c index acde951b..1ca581be 100644 --- a/terminal.c +++ b/terminal.c @@ -3511,7 +3511,7 @@ print_spacer(struct terminal *term, int col, int remaining) * - double width characters not supported */ void -term_fill(struct terminal *term, int r, int c, char data, size_t count, +term_fill(struct terminal *term, int r, int c, uint8_t data, size_t count, bool use_sgr_attrs) { struct row *row = grid_row(term->grid, r); diff --git a/terminal.h b/terminal.h index c8a43c64..0dd40c51 100644 --- a/terminal.h +++ b/terminal.h @@ -798,7 +798,7 @@ void term_cursor_down(struct terminal *term, int count); void term_cursor_blink_update(struct terminal *term); void term_print(struct terminal *term, char32_t wc, int width); -void term_fill(struct terminal *term, int row, int col, char c, size_t count, +void term_fill(struct terminal *term, int row, int col, uint8_t c, size_t count, bool use_sgr_attrs); void term_scroll(struct terminal *term, int rows);