neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit c3208feb72234840643a04d2282c37276fd53cda
parent d2d3be0a4a65f623e95b2eac1abf215233ba9f00
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Thu, 10 Mar 2022 16:43:32 +0800

vim-patch:8.2.3950: going beyond the end of the line with /\%V

Problem:    Going beyond the end of the line with /\%V.
Solution:   Check for valid column in getvcol().
https://github.com/vim/vim/commit/94f3192b03ed27474db80b4d3a409e107140738b

Diffstat:
Msrc/nvim/charset.c | 10++++++----
Msrc/nvim/testdir/test_regexp_latin.vim | 8++++++++
2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/nvim/charset.c b/src/nvim/charset.c @@ -928,10 +928,12 @@ void getvcol(win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *en // continue until the NUL posptr = NULL; } else { - // Special check for an empty line, which can happen on exit, when - // ml_get_buf() always returns an empty string. - if (*ptr == NUL) { - pos->col = 0; + // In a few cases the position can be beyond the end of the line. + for (colnr_T i = 0; i < pos->col; i++) { + if (ptr[i] == NUL) { + pos->col = i; + break; + } } posptr = ptr + pos->col; posptr -= utf_head_off(line, posptr); diff --git a/src/nvim/testdir/test_regexp_latin.vim b/src/nvim/testdir/test_regexp_latin.vim @@ -803,4 +803,12 @@ func Test_using_visual_position() bwipe! endfunc +func Test_using_invalid_visual_position() + " this was going beyond the end of the line + new + exe "norm 0o000\<Esc>0\<C-V>$s0" + /\%V + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab