]> granicus.if.org Git - vim/commitdiff
patch 8.0.0841: term_getline() may cause a crash v8.0.0841
authorBram Moolenaar <Bram@vim.org>
Wed, 2 Aug 2017 20:10:34 +0000 (22:10 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 2 Aug 2017 20:10:34 +0000 (22:10 +0200)
Problem:    term_getline() may cause a crash.
Solution:   Check that the row is valid. (Hirohito Higashi)

src/terminal.c
src/testdir/test_terminal.vim
src/version.c

index 4af083290115b7cfbddc6dd5bddd314dfca61d97..5622ce35967d019e963b16c64da9b0ee0f420f14 100644 (file)
@@ -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)
index 97f7d5c2d90d9582ecf93a84ad75a7de95f06af9..48ee1c4eca7a93c1d420df8e6a8f4873931a01f2 100644 (file)
@@ -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
index d4a334dedeeef54a3ed9999f5f3e18e39868e556..19ad732cbf3dfbd1329dbfef6393138b0e434e70 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    841,
 /**/
     840,
 /**/