diff options
| -rw-r--r-- | src/nvim/eval.c | 8 | ||||
| -rw-r--r-- | src/nvim/testdir/test_filter_map.vim | 4 | ||||
| -rw-r--r-- | src/nvim/version.c | 2 | 
3 files changed, 12 insertions, 2 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; diff --git a/src/nvim/testdir/test_filter_map.vim b/src/nvim/testdir/test_filter_map.vim index 6bb063c76d..c8d64ce0a4 100644 --- a/src/nvim/testdir/test_filter_map.vim +++ b/src/nvim/testdir/test_filter_map.vim @@ -5,10 +5,12 @@ func Test_filter_map_list_expr_string()    " filter()    call assert_equal([2, 3, 4], filter([1, 2, 3, 4], 'v:val > 1'))    call assert_equal([3, 4], filter([1, 2, 3, 4], 'v:key > 1')) +  call assert_equal([], filter([1, 2, 3, 4], 0))    " map()    call assert_equal([2, 4, 6, 8], map([1, 2, 3, 4], 'v:val * 2'))    call assert_equal([0, 2, 4, 6], map([1, 2, 3, 4], 'v:key * 2')) +  call assert_equal([9, 9, 9, 9], map([1, 2, 3, 4], 9))  endfunc  " dict with expression string @@ -18,10 +20,12 @@ func Test_filter_map_dict_expr_string()    " filter()    call assert_equal({"bar": 2, "baz": 3}, filter(copy(dict), 'v:val > 1'))    call assert_equal({"foo": 1, "baz": 3}, filter(copy(dict), 'v:key > "bar"')) +  call assert_equal({}, filter(copy(dict), 0))    " map()    call assert_equal({"foo": 2, "bar": 4, "baz": 6}, map(copy(dict), 'v:val * 2'))    call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), 'v:key[0]')) +  call assert_equal({"foo": 9, "bar": 9, "baz": 9}, map(copy(dict), 9))  endfunc  " list with funcref diff --git a/src/nvim/version.c b/src/nvim/version.c index 96dce2ca46..31f6c41ffc 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -438,7 +438,7 @@ static int included_patches[] = {    2005,    // 2004 NA    // 2003 NA -  // 2002, +  2002,    // 2001 NA    2000,    1999, | 
