From 8b89614e69b9b2330539d0482e44f4724053e780 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 2 Aug 2020 15:05:05 +0200 Subject: patch 8.2.1353: crash when drawing double-wide character in terminal window Problem: Crash when drawing double-wide character in terminal window. (Masato Nishihata) Solution: Check getcell() returning NULL. (issue #6141) --- src/libvterm/src/screen.c | 7 ++++++- src/testdir/test_terminal.vim | 15 +++++++++++++++ src/version.c | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/libvterm/src/screen.c b/src/libvterm/src/screen.c index eb90c20071..42890aa58a 100644 --- a/src/libvterm/src/screen.c +++ b/src/libvterm/src/screen.c @@ -186,7 +186,12 @@ static int putglyph(VTermGlyphInfo *info, VTermPos pos, void *user) cell->chars[i] = 0; for(col = 1; col < info->width; col++) - getcell(screen, pos.row, pos.col + col)->chars[0] = (uint32_t)-1; + { + ScreenCell *onecell = getcell(screen, pos.row, pos.col + col); + if (onecell == NULL) + break; + onecell->chars[0] = (uint32_t)-1; + } rect.start_row = pos.row; rect.end_row = pos.row+1; diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index fcc11565cd..c1ee493cd7 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -258,6 +258,21 @@ func Test_terminal_scrape_multibyte() call delete('Xtext') endfunc +func Test_terminal_one_column() + " This creates a terminal, displays a double-wide character and makes the + " window one column wide. This used to cause a crash. + let width = &columns + botright vert term + let buf = bufnr('$') + call term_wait(buf, 100) + exe "set columns=" .. (width / 2) + redraw + call term_sendkeys(buf, "キ") + call term_wait(buf, 10) + exe "set columns=" .. width + exe buf . 'bwipe!' +endfunc + func Test_terminal_scroll() call writefile(range(1, 200), 'Xtext') if has('win32') diff --git a/src/version.c b/src/version.c index 70d90c5764..f34402dc6f 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1353, /**/ 1352, /**/ -- cgit v1.2.3