From 421b597470c118871c7081de00dd065e0e000b7e Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 22 Feb 2024 19:48:06 +0100 Subject: patch 9.1.0126: Internal error when using upper-case mark in getregion() Problem: Internal error when passing mark in another buffer to getregion(). Solution: Don't allow marks in another buffer (zeertzjq) closes: #14076 Signed-off-by: zeertzjq Internal error when passing mark in another buffer to getregion() --- runtime/doc/builtin.txt | 4 +++- src/evalfunc.c | 4 ++-- src/testdir/test_visual.vim | 11 ++++++++++- src/version.c | 2 ++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index f1256b027c..b117bf84b1 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2024 Feb 21 +*builtin.txt* For Vim version 9.1. Last change: 2024 Feb 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4300,6 +4300,8 @@ getregion({pos1}, {pos2}, {type}) *getregion()* |visual-mode|, an empty list is returned. - If {pos1}, {pos2} or {type} is an invalid string, an empty list is returned. + - If {pos1} or {pos2} is a mark in different buffer, an empty + list is returned. Examples: > :xnoremap diff --git a/src/evalfunc.c b/src/evalfunc.c index 071bf7d0f8..981f8abedf 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -5508,12 +5508,12 @@ f_getregion(typval_T *argvars, typval_T *rettv) // NOTE: var2fpos() returns static pointer. fp = var2fpos(&argvars[0], TRUE, &fnum, FALSE); - if (fp == NULL) + if (fp == NULL || (fnum >= 0 && fnum != curbuf->b_fnum)) return; p1 = *fp; fp = var2fpos(&argvars[1], TRUE, &fnum, FALSE); - if (fp == NULL) + if (fp == NULL || (fnum >= 0 && fnum != curbuf->b_fnum)) return; p2 = *fp; diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim index 34c572e617..8b434238a8 100644 --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1712,7 +1712,16 @@ func Test_visual_getregion() call assert_fails(':echo "."->getregion([],"V")', 'E1174:') call assert_fails(':echo "."->getregion("$", {})', 'E1174:') call assert_fails(':echo [0, 1, 1, 0]->getregion("$", "v")', 'E1174:') - + " using a mark in another buffer + new + let newbuf = bufnr() + call setline(1, range(10)) + normal! GmA + wincmd p + call assert_equal([newbuf, 10, 1, 0], getpos("'A")) + call assert_equal([], getregion(".", "'A", 'v')) + call assert_equal([], getregion("'A", ".", 'v')) + exe newbuf .. 'bwipe!' bwipe! " Selection in starts or ends in the middle of a multibyte character diff --git a/src/version.c b/src/version.c index f4b2a1eac8..b8e79dd546 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 126, /**/ 125, /**/ -- cgit v1.2.3