Hi Bram and list,

How to reproduce:
$ vim --clean +term +"echo term_getline(2,0)"
and
$ vim --clean +term +"echo term_getline(2,999)"

Expected behavior:
term_getline() returns '' (empty string)

Actual bhavior:
SEGV occurs


I wrote a patch with add a test.
Check this out!
--
Best regards,
Hirohito Higashi (h_east)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index cbe5565..16a656b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -7982,7 +7982,7 @@ term_scrape({buf}, {row})				*term_scrape()*
 		    "chars"	character(s) at the cell
 		    "fg"	foreground color as #rrggbb
 		    "bg"	background color as #rrggbb
-		    "attr"	attributes of the cell, use term_getattr()
+		    "attr"	attributes of the cell, use |term_getattr()|
 		    		to get the individual flags
 		    "width"	cell width: 1 or 2
 
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 @@ 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 97f7d5c..48ee1c4 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

Raspunde prin e-mail lui