From aee6f08ce12a62e9104892702a658a8d3daee4df Mon Sep 17 00:00:00 2001 From: bfredl Date: Mon, 17 Apr 2023 13:08:53 +0200 Subject: fix(runtime): do not allow breakcheck inside runtime path calculation problem: breakcheck might run arbitrary lua code, which might require modules and thus invoke runtime path calculation recursively. solution: Block the use of breakcheck when expanding glob patterns inside 'runtimepath' fixes #23012 --- src/nvim/regexp_nfa.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/nvim/regexp_nfa.c') diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c index 260d40a202..69d4f00ee5 100644 --- a/src/nvim/regexp_nfa.c +++ b/src/nvim/regexp_nfa.c @@ -5890,7 +5890,7 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm regsubs_T *r; // Some patterns may take a long time to match, especially when using // recursive_regmatch(). Allow interrupting them with CTRL-C. - fast_breakcheck(); + reg_breakcheck(); if (got_int) { return false; } @@ -6020,7 +6020,7 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm for (listidx = 0; listidx < thislist->n; listidx++) { // If the list gets very long there probably is something wrong. // At least allow interrupting with CTRL-C. - fast_breakcheck(); + reg_breakcheck(); if (got_int) { break; } @@ -7168,7 +7168,7 @@ nextchar: } // Allow interrupting with CTRL-C. - line_breakcheck(); + reg_breakcheck(); if (got_int) { break; } @@ -7591,6 +7591,7 @@ static int nfa_regexec_nl(regmatch_T *rmp, uint8_t *line, colnr_T col, bool line rex.reg_win = NULL; rex.reg_ic = rmp->rm_ic; rex.reg_icombine = false; + rex.reg_nobreak = rmp->regprog->re_flags & RE_NOBREAK; rex.reg_maxcol = 0; return (int)nfa_regexec_both(line, col, NULL, NULL); } -- cgit