diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-04-04 18:14:34 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-04 18:14:34 +0100 |
commit | e8a4c0d91f89544e4f94b7bd612b5fb780944c33 (patch) | |
tree | 8c23d6fc9f8fba0a301d7a0b665bfaea187d3855 | |
parent | b471690fad5f40f74aca488b13669641fb2b9de1 (diff) | |
download | vim-git-e8a4c0d91f89544e4f94b7bd612b5fb780944c33.tar.gz |
patch 8.2.4687: "vimgrep /\%v/ *" may cause a crashv8.2.4687
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)
-rw-r--r-- | src/regexp.c | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/regexp.c b/src/regexp.c index 110d76d04..c031cc996 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -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); diff --git a/src/version.c b/src/version.c index fffd85f2a..23dede051 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4687, +/**/ 4686, /**/ 4685, |