From: Bram Moolenaar Date: Wed, 2 Aug 2017 20:10:34 +0000 (+0200) Subject: patch 8.0.0841: term_getline() may cause a crash X-Git-Tag: v8.0.0841 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c838a3e7141f9950508c84439d2f959bc67e941;p=vim 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 4af083290..5622ce359 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1847,6 +1847,8 @@ f_term_getline(typval_T *argvars, typval_T *rettv) 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 97f7d5c2d..48ee1c4ec 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -81,6 +81,10 @@ func Test_terminal_hide_buffer() 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 @@ func Check_123(buf) 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 d4a334ded..19ad732cb 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 841, /**/ 840, /**/