diff --git a/src/eval.c b/src/eval.c index 6e88c5c21..e0f27a098 100644 --- a/src/eval.c +++ b/src/eval.c @@ -5667,7 +5667,7 @@ tv_get_string_buf_chk(typval_T *varp, char_u *buf) #endif break; case VAR_UNKNOWN: - emsg(_("E908: using an invalid value as a String")); + emsg(_(e_inval_string)); break; } return NULL; diff --git a/src/evalfunc.c b/src/evalfunc.c index af43fb96e..f192506d8 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -2015,6 +2015,12 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off) return; ++list->lv_refcount; } + else if (argvars[arg_off].v_type == VAR_JOB + || argvars[arg_off].v_type == VAR_CHANNEL) + { + emsg(_(e_inval_string)); + return; + } else { cmd = tv_get_string_chk(&argvars[arg_off]); diff --git a/src/globals.h b/src/globals.h index e1738693d..34430d3e0 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1599,6 +1599,7 @@ EXTERN char e_listreq[] INIT(= N_("E714: List required")); EXTERN char e_listblobreq[] INIT(= N_("E897: List or Blob required")); EXTERN char e_listdictarg[] INIT(= N_("E712: Argument of %s must be a List or Dictionary")); EXTERN char e_listdictblobarg[] INIT(= N_("E896: Argument of %s must be a List, Dictionary or Blob")); +EXTERN char e_inval_string[] INIT(= N_("E908: using an invalid value as a String")); #endif #ifdef FEAT_QUICKFIX EXTERN char e_readerrf[] INIT(= N_("E47: Error while reading errorfile")); diff --git a/src/testdir/test_execute_func.vim b/src/testdir/test_execute_func.vim index 7934e6084..30dcb6202 100644 --- a/src/testdir/test_execute_func.vim +++ b/src/testdir/test_execute_func.vim @@ -38,8 +38,6 @@ func Test_execute_string() call assert_equal("\nsomething", execute('echo "something"', 'silent!')) call assert_equal("", execute('burp', 'silent!')) call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:') - - call assert_equal("", execute(test_null_string())) endfunc func Test_execute_list() @@ -50,7 +48,6 @@ func Test_execute_list() call assert_equal("\n0\n1\n2\n3", execute(l)) call assert_equal("", execute([])) - call assert_equal("", execute(test_null_list())) endfunc func Test_execute_does_not_change_col() @@ -132,3 +129,15 @@ func Test_win_execute_other_tab() tabclose unlet xyz endfunc + +func Test_execute_null() + call assert_equal("", execute(test_null_string())) + call assert_equal("", execute(test_null_list())) + call assert_fails('call execute(test_null_dict())', 'E731:') + call assert_fails('call execute(test_null_blob())', 'E976:') + call assert_fails('call execute(test_null_partial())','E729:') + if has('job') + call assert_fails('call execute(test_null_job())', 'E908:') + call assert_fails('call execute(test_null_channel())', 'E908:') + endif +endfunc diff --git a/src/version.c b/src/version.c index a02b198c5..54104ebac 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 103, /**/ 102, /**/