]> granicus.if.org Git - vim/commitdiff
patch 8.0.0886: crash when using ":term ls" v8.0.0886
authorBram Moolenaar <Bram@vim.org>
Mon, 7 Aug 2017 18:38:42 +0000 (20:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 7 Aug 2017 18:38:42 +0000 (20:38 +0200)
Problem:    Crash when using ":term ls".
Solution:   Fix line number computation.  Add a test for this.

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

index 99b82b2f510958706c35ea198a4a2cd91d2a4aae..901bb9bed11083db13babaaed53320c3fda44442 100644 (file)
@@ -695,14 +695,16 @@ term_job_running(term_T *term)
     static void
 add_scrollback_line_to_buffer(term_T *term, char_u *text, int len)
 {
-    linenr_T       lnum = term->tl_scrollback.ga_len - 1;
+    buf_T      *buf = term->tl_buffer;
+    int                empty = (buf->b_ml.ml_flags & ML_EMPTY);
+    linenr_T   lnum = buf->b_ml.ml_line_count;
 
     ml_append_buf(term->tl_buffer, lnum, text, len + 1, FALSE);
-    if (lnum == 0)
+    if (empty)
     {
        /* Delete the empty line that was in the empty buffer. */
-       curbuf = term->tl_buffer;
-       ml_delete(2, FALSE);
+       curbuf = buf;
+       ml_delete(1, FALSE);
        curbuf = curwin->w_buffer;
     }
 }
index 845f06b6ec9d9c7f74c0182d05855628cb6dce4e..2220a164a4baae26c6dc270c3f2b1499ae3536d9 100644 (file)
@@ -210,6 +210,31 @@ func Test_terminal_scrape_multibyte()
   call delete('Xtext')
 endfunc
 
+func Test_terminal_scroll()
+  call writefile(range(1, 200), 'Xtext')
+  if has('win32')
+    let cmd = 'cmd /c "type Xtext"'
+  else
+    let cmd = "cat Xtext"
+  endif
+  let buf = term_start(cmd)
+
+  let g:job = term_getjob(buf)
+  call WaitFor('job_status(g:job) == "dead"')
+  call term_wait(buf)
+  if has('win32')
+    " TODO: this should not be needed
+    sleep 100m
+  endif
+
+  call assert_equal('1', getline(1))
+  call assert_equal('49', getline(49))
+  call assert_equal('200', getline(200))
+
+  exe buf . 'bwipe'
+  call delete('Xtext')
+endfunc
+
 func Test_terminal_size()
   let cmd = Get_cat_123_cmd()
 
index 2b769ea4f571d2119888e57ae226ba013c86759f..4e78e31a2e4a8e77608e48f791c44ca4a40db96e 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    886,
 /**/
     885,
 /**/