diff options
| author | Michael Ennen <mike.ennen@gmail.com> | 2016-12-14 00:26:52 -0700 | 
|---|---|---|
| committer | Michael Ennen <mike.ennen@gmail.com> | 2017-02-14 17:38:16 -0700 | 
| commit | 6c423989fc5becb294dacedceaac0c2e878a3858 (patch) | |
| tree | 9f7efa2e37ee7e778c236bba11bb9daae8c91b5f /src/nvim/eval.c | |
| parent | bb2afeb0266ffd410e2e226a376f7ddbac633491 (diff) | |
| download | rneovim-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.c | 8 | 
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; | 
