1
0
forked from aniani/vim

updated for version 7.4.526

Problem:    matchstr() fails on long text. Daniel Hahler)
Solution:   Return NFA_TOO_EXPENSIVE from regexec_nl(). (Christian Brabandt)
This commit is contained in:
Bram Moolenaar
2014-11-20 23:07:05 +01:00
parent b738c9a442
commit 66a3e797a2
2 changed files with 15 additions and 12 deletions

View File

@@ -3739,7 +3739,7 @@ static int bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, in
* Uses curbuf for line count and 'iskeyword'. * Uses curbuf for line count and 'iskeyword'.
* if "line_lbr" is TRUE consider a "\n" in "line" to be a line break. * if "line_lbr" is TRUE consider a "\n" in "line" to be a line break.
* *
* Return TRUE if there is a match, FALSE if not. * Returns 0 for failure, number of lines contained in the match otherwise.
*/ */
static int static int
bt_regexec_nl(rmp, line, col, line_lbr) bt_regexec_nl(rmp, line, col, line_lbr)
@@ -3759,7 +3759,8 @@ bt_regexec_nl(rmp, line, col, line_lbr)
ireg_icombine = FALSE; ireg_icombine = FALSE;
#endif #endif
ireg_maxcol = 0; ireg_maxcol = 0;
return (bt_regexec_both(line, col, NULL) != 0);
return bt_regexec_both(line, col, NULL);
} }
static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm)); static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
@@ -3781,8 +3782,6 @@ bt_regexec_multi(rmp, win, buf, lnum, col, tm)
colnr_T col; /* column to start looking for match */ colnr_T col; /* column to start looking for match */
proftime_T *tm; /* timeout limit or NULL */ proftime_T *tm; /* timeout limit or NULL */
{ {
long r;
reg_match = NULL; reg_match = NULL;
reg_mmatch = rmp; reg_mmatch = rmp;
reg_buf = buf; reg_buf = buf;
@@ -3796,14 +3795,13 @@ bt_regexec_multi(rmp, win, buf, lnum, col, tm)
#endif #endif
ireg_maxcol = rmp->rmm_maxcol; ireg_maxcol = rmp->rmm_maxcol;
r = bt_regexec_both(NULL, col, tm); return bt_regexec_both(NULL, col, tm);
return r;
} }
/* /*
* Match a regexp against a string ("line" points to the string) or multiple * Match a regexp against a string ("line" points to the string) or multiple
* lines ("line" is NULL, use reg_getline()). * lines ("line" is NULL, use reg_getline()).
* Returns 0 for failure, number of lines contained in the match otherwise.
*/ */
static long static long
bt_regexec_both(line, col, tm) bt_regexec_both(line, col, tm)
@@ -8201,11 +8199,12 @@ vim_regexec_both(rmp, line, col, nl)
p_re = save_p_re; p_re = save_p_re;
} }
return result; return result > 0;
} }
/* /*
* Note: "*prog" may be freed and changed. * Note: "*prog" may be freed and changed.
* Return TRUE if there is a match, FALSE if not.
*/ */
int int
vim_regexec_prog(prog, ignore_case, line, col) vim_regexec_prog(prog, ignore_case, line, col)
@@ -8226,6 +8225,7 @@ vim_regexec_prog(prog, ignore_case, line, col)
/* /*
* Note: "rmp->regprog" may be freed and changed. * Note: "rmp->regprog" may be freed and changed.
* Return TRUE if there is a match, FALSE if not.
*/ */
int int
vim_regexec(rmp, line, col) vim_regexec(rmp, line, col)
@@ -8241,6 +8241,7 @@ vim_regexec(rmp, line, col)
/* /*
* Like vim_regexec(), but consider a "\n" in "line" to be a line break. * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
* Note: "rmp->regprog" may be freed and changed. * Note: "rmp->regprog" may be freed and changed.
* Return TRUE if there is a match, FALSE if not.
*/ */
int int
vim_regexec_nl(rmp, line, col) vim_regexec_nl(rmp, line, col)
@@ -8297,5 +8298,5 @@ vim_regexec_multi(rmp, win, buf, lnum, col, tm)
p_re = save_p_re; p_re = save_p_re;
} }
return result; return result <= 0 ? 0 : result;
} }

View File

@@ -741,6 +741,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
526,
/**/ /**/
525, 525,
/**/ /**/