diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-06-23 07:37:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-23 07:37:54 +0800 |
commit | 1b75094e3e1c2ef002f2a089d17553f84e06e06f (patch) | |
tree | e93ed3e43c866b2c6a83c4bb7d76fc843d9c3390 /src | |
parent | 801faeaae263b545afc18b1cb6f2ad14dceb4c23 (diff) | |
parent | a4d7394bc8acba0d67f0e2ad7b5645007e37417a (diff) | |
download | rneovim-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.c | 5 | ||||
-rw-r--r-- | src/nvim/indent.c | 6 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_lispwords.vim | 12 |
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 |