1
0
forked from aniani/vim

patch 8.2.4687: "vimgrep /\%v/ *" may cause a crash

Problem:    "vimgrep /\%v/ *" may cause a crash.
Solution:   When compiling the pattern with the old engine fails, restore the
            regprog of the new engine instead of leaving it NULL.
            (closes #10079)
This commit is contained in:
Bram Moolenaar
2022-04-04 18:14:34 +01:00
parent b471690fad
commit e8a4c0d91f
2 changed files with 13 additions and 3 deletions

View File

@@ -2874,9 +2874,10 @@ vim_regexec_multi(
char_u *pat = vim_strsave(((nfa_regprog_T *)rmp->regprog)->pattern);
p_re = BACKTRACKING_ENGINE;
vim_regfree(rmp->regprog);
if (pat != NULL)
{
regprog_T *prev_prog = rmp->regprog;
#ifdef FEAT_EVAL
report_re_switch(pat);
#endif
@@ -2889,9 +2890,16 @@ vim_regexec_multi(
#ifdef FEAT_SYN_HL
reg_do_extmatch = 0;
#endif
if (rmp->regprog != NULL)
if (rmp->regprog == NULL)
{
// Somehow compiling the pattern failed now, put back the
// previous one to avoid "regprog" becoming NULL.
rmp->regprog = prev_prog;
}
else
{
vim_regfree(prev_prog);
rmp->regprog->re_in_use = TRUE;
result = rmp->regprog->engine->regexec_multi(
rmp, win, buf, lnum, col, tm, timed_out);