aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/regexp_bt.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-04-17 13:08:53 +0200
committerbfredl <bjorn.linse@gmail.com>2023-04-19 16:34:15 +0200
commitaee6f08ce12a62e9104892702a658a8d3daee4df (patch)
tree3a9e9b6f0e546fe3f685a1de2a074118ed19c860 /src/nvim/regexp_bt.c
parent7bf1a917b78ebc622b6691af9196b95b4a9d3142 (diff)
downloadrneovim-aee6f08ce12a62e9104892702a658a8d3daee4df.tar.gz
rneovim-aee6f08ce12a62e9104892702a658a8d3daee4df.tar.bz2
rneovim-aee6f08ce12a62e9104892702a658a8d3daee4df.zip
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
Diffstat (limited to 'src/nvim/regexp_bt.c')
-rw-r--r--src/nvim/regexp_bt.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/nvim/regexp_bt.c b/src/nvim/regexp_bt.c
index af3d93f7c4..a6f554d4ae 100644
--- a/src/nvim/regexp_bt.c
+++ b/src/nvim/regexp_bt.c
@@ -3539,7 +3539,7 @@ static bool regmatch(uint8_t *scan, proftime_T *tm, int *timed_out)
for (;;) {
// Some patterns may take a long time to match, e.g., "\([a-z]\+\)\+Q".
// Allow interrupting them with CTRL-C.
- fast_breakcheck();
+ reg_breakcheck();
#ifdef REGEXP_DEBUG
if (scan != NULL && regnarrate) {
@@ -4792,7 +4792,7 @@ static bool regmatch(uint8_t *scan, proftime_T *tm, int *timed_out)
break;
}
rex.input = rex.line + strlen((char *)rex.line);
- fast_breakcheck();
+ reg_breakcheck();
} else {
MB_PTR_BACK(rex.line, rex.input);
}
@@ -5155,6 +5155,7 @@ static int bt_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;
long r = bt_regexec_both(line, col, NULL, NULL);