aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorMichael Ennen <mike.ennen@gmail.com>2016-12-14 00:26:52 -0700
committerMichael Ennen <mike.ennen@gmail.com>2017-02-14 17:38:16 -0700
commit6c423989fc5becb294dacedceaac0c2e878a3858 (patch)
tree9f7efa2e37ee7e778c236bba11bb9daae8c91b5f /src/nvim/eval.c
parentbb2afeb0266ffd410e2e226a376f7ddbac633491 (diff)
downloadrneovim-6c423989fc5becb294dacedceaac0c2e878a3858.tar.gz
rneovim-6c423989fc5becb294dacedceaac0c2e878a3858.tar.bz2
rneovim-6c423989fc5becb294dacedceaac0c2e878a3858.zip
vim-patch:7.4.2002
Problem: Crash when passing number to filter() or map(). Solution: Convert to a string. (Ozaki Kiichi) https://github.com/vim/vim/commit/a06ec8f345eabb66e5b7d7c0192cfebdde63115d
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index e4afa18d10..017bb92c75 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -9414,7 +9414,8 @@ static void filter_map(typval_T *argvars, typval_T *rettv, int map)
static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp)
{
typval_T rettv;
- typeval_T argv[3];
+ typval_T argv[3];
+ char_u buf[NUMBUFLEN];
char_u *s;
int retval = FAIL;
int dummy;
@@ -9424,6 +9425,7 @@ static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp)
argv[1] = vimvars[VV_VAL].vv_tv;
s = expr->vval.v_string;
if (expr->v_type == VAR_FUNC) {
+ s = expr->vval.v_string;
if (call_func(s, (int)STRLEN(s), &rettv, 2, argv, 0L, 0L, &dummy,
true, NULL, NULL) == FAIL) {
goto theend;
@@ -9437,6 +9439,10 @@ static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp)
goto theend;
}
} else {
+ s = get_tv_string_buf_chk(expr, buf);
+ if (s == NULL) {
+ goto theend;
+ }
s = skipwhite(s);
if (eval1(&s, &rettv, true) == FAIL) {
goto theend;