changeset 15000:32787e326de2 v8.1.0511

patch 8.1.0511: ml_get error when calling a function with a range commit https://github.com/vim/vim/commit/9e353b5265bd7fa103caf4e5a9b3c99f344f548e Author: Bram Moolenaar <Bram@vim.org> Date: Sun Nov 4 23:39:38 2018 +0100 patch 8.1.0511: ml_get error when calling a function with a range Problem: ml_get error when calling a function with a range. Solution: Don't position the cursor after the last line.
author Bram Moolenaar <Bram@vim.org>
date Sun, 04 Nov 2018 23:45:07 +0100
parents 2b30a2b4bde2
children 9401618259e9
files src/testdir/test_functions.vim src/userfunc.c src/version.c
diffstat 3 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1119,3 +1119,22 @@ func Test_func_sandbox()
   call assert_fails('call Fsandbox()', 'E48:')
   delfunc Fsandbox
 endfunc
+
+func EditAnotherFile()
+  let word = expand('<cword>')
+  edit Xfuncrange2
+endfunc
+
+func Test_func_range_with_edit()
+  " Define a function that edits another buffer, then call it with a range that
+  " is invalid in that buffer.
+  call writefile(['just one line'], 'Xfuncrange2')
+  new
+  call setline(1, range(10))
+  write Xfuncrange1
+  call assert_fails('5,8call EditAnotherFile()', 'E16:')
+
+  call delete('Xfuncrange1')
+  call delete('Xfuncrange2')
+  bwipe!
+endfunc
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3149,6 +3149,13 @@ ex_call(exarg_T *eap)
     {
 	if (!eap->skip && eap->addr_count > 0)
 	{
+	    if (lnum > curbuf->b_ml.ml_line_count)
+	    {
+		// If the function deleted lines or switched to another buffer
+		// the line number may become invalid.
+		EMSG(_(e_invrange));
+		break;
+	    }
 	    curwin->w_cursor.lnum = lnum;
 	    curwin->w_cursor.col = 0;
 #ifdef FEAT_VIRTUALEDIT
--- a/src/version.c
+++ b/src/version.c
@@ -793,6 +793,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    511,
+/**/
     510,
 /**/
     509,