diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-10-28 14:36:09 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-10-28 14:36:09 +0100 |
commit | 1c29943416207e21abbc790eaf563b36789170c2 (patch) | |
tree | 46c90eca7f6a9522182da5995737f6cd40c4e59d | |
parent | d474686a09ef3f7529e65abe00cf8cd2ea8a95eb (diff) | |
download | vim-git-1c29943416207e21abbc790eaf563b36789170c2.tar.gz |
patch 8.1.0499: :2vimgrep causes an ml_get errorv8.1.0499
Problem: :2vimgrep causes an ml_get error
Solution: Pass tomatch pointer instead of value. (Yegappan Lakshmanan)
-rw-r--r-- | src/ex_getln.c | 6 | ||||
-rw-r--r-- | src/quickfix.c | 8 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 27 insertions, 4 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index e37ebe2c9..31e646dd3 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -483,6 +483,12 @@ may_do_incsearch_highlighting( if (search_first_line == 0) // start at the original cursor position curwin->w_cursor = is_state->search_start; + else if (search_first_line > curbuf->b_ml.ml_line_count) + { + // start after the last line + curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; + curwin->w_cursor.col = MAXCOL; + } else { // start at the first line in the range diff --git a/src/quickfix.c b/src/quickfix.c index b899612d8..9b1922025 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -5217,7 +5217,7 @@ vgr_match_buflines( char_u *fname, buf_T *buf, regmmatch_T *regmatch, - long tomatch, + long *tomatch, int duplicate_name, int flags) { @@ -5225,7 +5225,7 @@ vgr_match_buflines( long lnum; colnr_T col; - for (lnum = 1; lnum <= buf->b_ml.ml_line_count && tomatch > 0; ++lnum) + for (lnum = 1; lnum <= buf->b_ml.ml_line_count && *tomatch > 0; ++lnum) { col = 0; while (vim_regexec_multi(regmatch, curwin, buf, lnum, @@ -5255,7 +5255,7 @@ vgr_match_buflines( break; } found_match = TRUE; - if (--tomatch == 0) + if (--*tomatch == 0) break; if ((flags & VGR_GLOBAL) == 0 || regmatch->endpos[0].lnum > 0) @@ -5464,7 +5464,7 @@ ex_vimgrep(exarg_T *eap) // Try for a match in all lines of the buffer. // For ":1vimgrep" look for first match only. found_match = vgr_match_buflines(qi, fname, buf, ®match, - tomatch, duplicate_name, flags); + &tomatch, duplicate_name, flags); if (using_dummy) { diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 01a950f34..b779e2806 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -2364,6 +2364,21 @@ func Test_vimgrep() call XvimgrepTests('l') endfunc +" Test for incsearch highlighting of the :vimgrep pattern +" This test used to cause "E315: ml_get: invalid lnum" errors. +func Test_vimgrep_incsearch() + enew + set incsearch + call test_override("char_avail", 1) + + call feedkeys(":2vimgrep assert test_quickfix.vim test_cdo.vim\<CR>", "ntx") + let l = getqflist() + call assert_equal(2, len(l)) + + call test_override("ALL", 0) + set noincsearch +endfunc + func XfreeTests(cchar) call s:setup_commands(a:cchar) diff --git a/src/version.c b/src/version.c index c867ecf39..b1aa8aa43 100644 --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 499, +/**/ 498, /**/ 497, |