diff options
| -rw-r--r-- | src/nvim/ex_docmd.c | 9 | ||||
| -rw-r--r-- | test/functional/ex_cmds/quickfix_commands_spec.lua | 13 | 
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) | 
