aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-17 10:42:06 +0800
committerGitHub <noreply@github.com>2022-04-17 10:42:06 +0800
commitae325e627484fa0402a3fd8c75508c8c0f82a9c3 (patch)
treea1588250d2b570f9a4316c5dde3e4af0a8757865
parent813ecdac795405565aab5cb61cb83b9ca1581b60 (diff)
parentf823dce100abcc06a12258d92b792fe01d1fe398 (diff)
downloadrneovim-ae325e627484fa0402a3fd8c75508c8c0f82a9c3.tar.gz
rneovim-ae325e627484fa0402a3fd8c75508c8c0f82a9c3.tar.bz2
rneovim-ae325e627484fa0402a3fd8c75508c8c0f82a9c3.zip
Merge pull request #18139 from zeertzjq/vim-8.2.0791
vim-patch:8.2.0791
-rw-r--r--src/nvim/ex_docmd.c9
-rw-r--r--test/functional/ex_cmds/quickfix_commands_spec.lua13
2 files changed, 20 insertions, 2 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index cbfe6e3789..fc0bb48803 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -2373,8 +2373,13 @@ int parse_cmd_address(exarg_T *eap, char **errormsg, bool silent)
switch (eap->addr_type) {
case ADDR_LINES:
case ADDR_OTHER:
- // default is current line number
- eap->line2 = curwin->w_cursor.lnum;
+ // Default is the cursor line number. Avoid using an invalid
+ // line number though.
+ if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) {
+ eap->line2 = curbuf->b_ml.ml_line_count;
+ } else {
+ eap->line2 = curwin->w_cursor.lnum;
+ }
break;
case ADDR_WINDOWS:
eap->line2 = CURRENT_WIN_NR;
diff --git a/test/functional/ex_cmds/quickfix_commands_spec.lua b/test/functional/ex_cmds/quickfix_commands_spec.lua
index c956a2df2d..94b7fa1a84 100644
--- a/test/functional/ex_cmds/quickfix_commands_spec.lua
+++ b/test/functional/ex_cmds/quickfix_commands_spec.lua
@@ -109,4 +109,17 @@ describe('quickfix', function()
]])
eq({0, 6, 1, 0, 1}, funcs.getcurpos())
end)
+
+ it('BufAdd does not cause E16 when reusing quickfix buffer #18135', function()
+ local file = file_base .. '_reuse_qfbuf_BufAdd'
+ write_file(file, ('\n'):rep(100) .. 'foo')
+ source([[
+ set grepprg=internal
+ autocmd BufAdd * call and(0, 0)
+ autocmd QuickFixCmdPost grep ++nested cclose | cwindow
+ ]])
+ command('grep foo ' .. file)
+ command('grep foo ' .. file)
+ os.remove(file)
+ end)
end)