aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-03-10 16:43:32 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-03-10 17:22:39 +0800
commitc3208feb72234840643a04d2282c37276fd53cda (patch)
tree95dbe6e7a030cece3fa17a57b1d300797686accf /src
parentd2d3be0a4a65f623e95b2eac1abf215233ba9f00 (diff)
downloadrneovim-c3208feb72234840643a04d2282c37276fd53cda.tar.gz
rneovim-c3208feb72234840643a04d2282c37276fd53cda.tar.bz2
rneovim-c3208feb72234840643a04d2282c37276fd53cda.zip
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 (limited to 'src')
-rw-r--r--src/nvim/charset.c10
-rw-r--r--src/nvim/testdir/test_regexp_latin.vim8
2 files changed, 14 insertions, 4 deletions
diff --git a/src/nvim/charset.c b/src/nvim/charset.c
index 97aac67627..3383dd2a76 100644
--- 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
index 538b078999..a0f5ebfb9f 100644
--- 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