patch 8.0.0841: term_getline() may cause a crash
Problem: term_getline() may cause a crash.
Solution: Check that the row is valid. (Hirohito Higashi)
diff --git a/src/terminal.c b/src/terminal.c
index 4af0832..5622ce3 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1847,6 +1847,8 @@
int len;
char_u *p;
+ if (row < 0 || row >= term->tl_rows)
+ return;
len = term->tl_cols * MB_MAXBYTES + 1;
p = alloc(len);
if (p == NULL)
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 97f7d5c..48ee1c4 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -81,6 +81,10 @@
endfunc
func Check_123(buf)
+ let l = term_scrape(a:buf, 0)
+ call assert_true(len(l) == 0)
+ let l = term_scrape(a:buf, 999)
+ call assert_true(len(l) == 0)
let l = term_scrape(a:buf, 1)
call assert_true(len(l) > 0)
call assert_equal('1', l[0].chars)
@@ -93,6 +97,12 @@
call assert_equal('#000000', l[0].bg)
endif
+ let l = term_getline(a:buf, -1)
+ call assert_equal('', l)
+ let l = term_getline(a:buf, 0)
+ call assert_equal('', l)
+ let l = term_getline(a:buf, 999)
+ call assert_equal('', l)
let l = term_getline(a:buf, 1)
call assert_equal('123', l)
endfunc
diff --git a/src/version.c b/src/version.c
index d4a334d..19ad732 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 841,
+/**/
840,
/**/
839,