From: Bram Moolenaar Date: Sun, 1 May 2016 21:05:53 +0000 (+0200) Subject: patch 7.4.1816 X-Git-Tag: v7.4.1816 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8585eded6359f1d7e1981e96ae775efd077c638;p=thirdparty%2Fvim.git patch 7.4.1816 Problem: Looping over a null list throws an error. Solution: Skip over the for loop. --- diff --git a/src/eval.c b/src/eval.c index fa2f839e3d..83bac72439 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3292,11 +3292,16 @@ eval_for_line( if (!skip) { l = tv.vval.v_list; - if (tv.v_type != VAR_LIST || l == NULL) + if (tv.v_type != VAR_LIST) { EMSG(_(e_listreq)); clear_tv(&tv); } + else if (l == NULL) + { + /* a null list is like an empty list: do nothing */ + clear_tv(&tv); + } else { /* No need to increment the refcount, it's already set for the diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index a726933740..2cd9625adc 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -83,3 +83,10 @@ func Test_getreg_empty_list() call add(x, 'foo') call assert_equal(['foo'], y) endfunc + +func Test_loop_over_null_list() + let null_list = submatch(1, 1) + for i in null_list + call assert_true(0, 'should not get here') + endfor +endfunc diff --git a/src/version.c b/src/version.c index 3ecf611397..cf4e2947fd 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1816, /**/ 1815, /**/