aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-06-23 07:37:54 +0800
committerGitHub <noreply@github.com>2022-06-23 07:37:54 +0800
commit1b75094e3e1c2ef002f2a089d17553f84e06e06f (patch)
treee93ed3e43c866b2c6a83c4bb7d76fc843d9c3390 /src
parent801faeaae263b545afc18b1cb6f2ad14dceb4c23 (diff)
parenta4d7394bc8acba0d67f0e2ad7b5645007e37417a (diff)
downloadrneovim-1b75094e3e1c2ef002f2a089d17553f84e06e06f.tar.gz
rneovim-1b75094e3e1c2ef002f2a089d17553f84e06e06f.tar.bz2
rneovim-1b75094e3e1c2ef002f2a089d17553f84e06e06f.zip
Merge pull request #19054 from zeertzjq/vim-8.2.5150
vim-patch:8.2.{5150,5151}: reading beyond the end of the line
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c5
-rw-r--r--src/nvim/indent.c6
-rw-r--r--src/nvim/testdir/test_cmdline.vim8
-rw-r--r--src/nvim/testdir/test_lispwords.vim12
4 files changed, 27 insertions, 4 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index a65e89a9f5..49db5c3716 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -2826,10 +2826,13 @@ int parse_cmd_address(exarg_T *eap, char **errormsg, bool silent)
curwin->w_cursor.lnum = eap->line2;
// Don't leave the cursor on an illegal line or column, but do
- // accept zero as address, so 0;/PATTERN/ works correctly.
+ // accept zero as address, so 0;/PATTERN/ works correctly
+ // (where zero usually means to use the first line).
// Check the cursor position before returning.
if (eap->line2 > 0) {
check_cursor();
+ } else {
+ check_cursor_col();
}
need_check_cursor = true;
}
diff --git a/src/nvim/indent.c b/src/nvim/indent.c
index 010d2fe869..d71b3adb5c 100644
--- a/src/nvim/indent.c
+++ b/src/nvim/indent.c
@@ -697,8 +697,10 @@ int get_lisp_indent(void)
&& lisp_match(that + 1)) {
amount += 2;
} else {
- that++;
- amount++;
+ if (*that != NUL) {
+ that++;
+ amount++;
+ }
firsttry = amount;
while (ascii_iswhite(*that)) {
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index b2c752376f..d26c80077d 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -636,6 +636,14 @@ func Test_illegal_address2()
call delete('Xtest.vim')
endfunc
+func Test_mark_from_line_zero()
+ " this was reading past the end of the first (empty) line
+ new
+ norm oxxxx
+ call assert_fails("0;'(", 'E20:')
+ bwipe!
+endfunc
+
func Test_cmdline_complete_wildoptions()
help
call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx')
diff --git a/src/nvim/testdir/test_lispwords.vim b/src/nvim/testdir/test_lispwords.vim
index ff710b2716..4144fb0521 100644
--- a/src/nvim/testdir/test_lispwords.vim
+++ b/src/nvim/testdir/test_lispwords.vim
@@ -1,4 +1,5 @@
-" Tests for 'lispwords' settings being global-local
+" Tests for 'lispwords' settings being global-local.
+" And other lisp indent stuff.
set nocompatible viminfo+=nviminfo
@@ -85,4 +86,13 @@ func Test_lisp_indent()
set nolisp
endfunc
+func Test_lisp_indent_works()
+ " This was reading beyond the end of the line
+ new
+ exe "norm a\tü(\<CR>="
+ set lisp
+ norm ==
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab