summaryrefslogtreecommitdiff
path: root/src/regexp.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-11-10 00:13:50 +0100
committerBram Moolenaar <Bram@vim.org>2019-11-10 00:13:50 +0100
commit4c054e9fb23027b55a09ee647a3a2c91936aeb1b (patch)
treed82b63c1d746e94f9f6ae1a8083fbdbd60f79612 /src/regexp.c
parentee85702c10495041791f728e977b86005c4496e8 (diff)
downloadvim-git-4c054e9fb23027b55a09ee647a3a2c91936aeb1b.tar.gz
patch 8.1.2282: crash when passing many arguments through a partialv8.1.2282
Problem: Crash when passing many arguments through a partial. (Andy Massimino) Solution: Check the number of arguments. (closes #5186)
Diffstat (limited to 'src/regexp.c')
-rw-r--r--src/regexp.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/regexp.c b/src/regexp.c
index 42f34c2f9..7fe891d31 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -2015,12 +2015,18 @@ vim_regsub_both(
call_func(s, -1, &rettv, 1, argv, &funcexe);
}
if (matchList.sl_list.lv_len > 0)
- /* fill_submatch_list() was called */
+ // fill_submatch_list() was called
clear_submatch_list(&matchList);
- eval_result = tv_get_string_buf_chk(&rettv, buf);
- if (eval_result != NULL)
- eval_result = vim_strsave(eval_result);
+ if (rettv.v_type == VAR_UNKNOWN)
+ // something failed, no need to report another error
+ eval_result = NULL;
+ else
+ {
+ eval_result = tv_get_string_buf_chk(&rettv, buf);
+ if (eval_result != NULL)
+ eval_result = vim_strsave(eval_result);
+ }
clear_tv(&rettv);
}
else