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