summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-10-28 14:36:09 +0100
committerBram Moolenaar <Bram@vim.org>2018-10-28 14:36:09 +0100
commit1c29943416207e21abbc790eaf563b36789170c2 (patch)
tree46c90eca7f6a9522182da5995737f6cd40c4e59d
parentd474686a09ef3f7529e65abe00cf8cd2ea8a95eb (diff)
downloadvim-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.c6
-rw-r--r--src/quickfix.c8
-rw-r--r--src/testdir/test_quickfix.vim15
-rw-r--r--src/version.c2
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, &regmatch,
- 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,