forked from aniani/vim
patch 8.1.0098: segfault when pattern with \z() is very slow
Problem: Segfault when pattern with \z() is very slow.
Solution: Check for NULL regprog. Add "nfa_fail" to test_override() to be
able to test this. Fix that 'searchhl' resets called_emsg.
This commit is contained in:
@@ -1482,7 +1482,7 @@ nfa_regatom(void)
|
||||
case '8':
|
||||
case '9':
|
||||
/* \z1...\z9 */
|
||||
if (reg_do_extmatch != REX_USE)
|
||||
if ((reg_do_extmatch & REX_USE) == 0)
|
||||
EMSG_RET_FAIL(_(e_z1_not_allowed));
|
||||
EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
|
||||
/* No need to set nfa_has_backref, the sub-matches don't
|
||||
@@ -1491,7 +1491,7 @@ nfa_regatom(void)
|
||||
break;
|
||||
case '(':
|
||||
/* \z( */
|
||||
if (reg_do_extmatch != REX_SET)
|
||||
if ((reg_do_extmatch & REX_SET) == 0)
|
||||
EMSG_RET_FAIL(_(e_z_not_allowed));
|
||||
if (nfa_reg(REG_ZPAREN) == FAIL)
|
||||
return FAIL; /* cascaded error */
|
||||
@@ -5692,7 +5692,8 @@ nfa_regmatch(
|
||||
nextlist->n = 0; /* clear nextlist */
|
||||
nextlist->has_pim = FALSE;
|
||||
++nfa_listid;
|
||||
if (prog->re_engine == AUTOMATIC_ENGINE && nfa_listid >= NFA_MAX_STATES)
|
||||
if (prog->re_engine == AUTOMATIC_ENGINE
|
||||
&& (nfa_listid >= NFA_MAX_STATES || nfa_fail_for_testing))
|
||||
{
|
||||
/* too many states, retry with old engine */
|
||||
nfa_match = NFA_TOO_EXPENSIVE;
|
||||
|
||||
Reference in New Issue
Block a user