Permalink
Browse files

patch 8.0.1416: crash when searching for a sentence

Problem:    Crash when searching for a sentence.
Solution:   Return NUL when getting character at MAXCOL. (closes #2468)
  • Loading branch information...
brammool committed Dec 19, 2017
1 parent 4ce46c2 commit 8ada6aa9298b4764d9ca0024dd21b17e815595ce
Showing with 33 additions and 14 deletions.
  1. +3 −2 src/ex_docmd.c
  2. +5 −1 src/misc1.c
  3. +16 −11 src/misc2.c
  4. +7 −0 src/testdir/test_search.vim
  5. +2 −0 src/version.c
View
@@ -4521,13 +4521,14 @@ get_address(
if (lnum != MAXLNUM)
curwin->w_cursor.lnum = lnum;
/*
* Start a forward search at the end of the line.
* Start a forward search at the end of the line (unless
* before the first line).
* Start a backward search at the start of the line.
* This makes sure we never match in the current
* line, and can match anywhere in the
* next/previous line.
*/
if (c == '/')
if (c == '/' && curwin->w_cursor.lnum > 0)
curwin->w_cursor.col = MAXCOL;
else
curwin->w_cursor.col = 0;
View
@@ -2650,8 +2650,12 @@ del_lines(
int
gchar_pos(pos_T *pos)
{
char_u *ptr = ml_get_pos(pos);
char_u *ptr;
/* When searching columns is sometimes put at the end of a line. */
if (pos->col == MAXCOL)
return NUL;
ptr = ml_get_pos(pos);
#ifdef FEAT_MBYTE
if (has_mbyte)
return (*mb_ptr2char)(ptr);
View
@@ -348,24 +348,29 @@ inc_cursor(void)
int
inc(pos_T *lp)
{
char_u *p = ml_get_pos(lp);
char_u *p;
if (*p != NUL) /* still within line, move to next char (may be NUL) */
/* when searching position may be set to end of a line */
if (lp->col != MAXCOL)
{
#ifdef FEAT_MBYTE
if (has_mbyte)
p = ml_get_pos(lp);
if (*p != NUL) /* still within line, move to next char (may be NUL) */
{
int l = (*mb_ptr2len)(p);
#ifdef FEAT_MBYTE
if (has_mbyte)
{
int l = (*mb_ptr2len)(p);
lp->col += l;
return ((p[l] != NUL) ? 0 : 2);
}
lp->col += l;
return ((p[l] != NUL) ? 0 : 2);
}
#endif
lp->col++;
lp->col++;
#ifdef FEAT_VIRTUALEDIT
lp->coladd = 0;
lp->coladd = 0;
#endif
return ((p[1] != NUL) ? 0 : 2);
return ((p[1] != NUL) ? 0 : 2);
}
}
if (lp->lnum != curbuf->b_ml.ml_line_count) /* there is a next line */
{
@@ -729,3 +729,10 @@ func Test_look_behind()
call search(getline("."))
bwipe!
endfunc
func Test_search_sentence()
new
" this used to cause a crash
call assert_fails("/\\%'", 'E486')
call assert_fails("/", 'E486')
endfunc
View
@@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1416,
/**/
1415,
/**/

0 comments on commit 8ada6aa

Please sign in to comment.