diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-02-22 19:48:06 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-02-22 19:48:06 +0100 |
commit | 421b597470c118871c7081de00dd065e0e000b7e (patch) | |
tree | 468685895448cd96be6befa3e1df9cda1ed72a3d /src | |
parent | 1624970d321cfb637ac76232df9c9b3f2fae904c (diff) |
patch 9.1.0126: Internal error when using upper-case mark in getregion()v9.1.0126
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 <zeertzjq@outlook.com>
Internal error when passing mark in another buffer to getregion()
Diffstat (limited to 'src')
-rw-r--r-- | src/evalfunc.c | 4 | ||||
-rw-r--r-- | src/testdir/test_visual.vim | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 14 insertions, 3 deletions
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 @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 126, +/**/ 125, /**/ 124, |