Mercurial > vim
changeset 19085:fd1070ff696b v8.2.0103
patch 8.2.0103: using null object with execute() has strange effects
Commit: https://github.com/vim/vim/commit/e2a8f0773e91685843c062b1e48259712d5f2213
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 8 19:32:18 2020 +0100
patch 8.2.0103: using null object with execute() has strange effects
Problem: Using null object with execute() has strange effects.
Solution: Give an error message ofr Job and Channel.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 08 Jan 2020 19:45:04 +0100 |
parents | cd25e7f54344 |
children | 8225fdd8fe14 |
files | src/eval.c src/evalfunc.c src/globals.h src/testdir/test_execute_func.vim src/version.c |
diffstat | 5 files changed, 22 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -5667,7 +5667,7 @@ tv_get_string_buf_chk(typval_T *varp, ch #endif break; case VAR_UNKNOWN: - emsg(_("E908: using an invalid value as a String")); + emsg(_(e_inval_string)); break; } return NULL;
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -2015,6 +2015,12 @@ execute_common(typval_T *argvars, typval 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]);
--- a/src/globals.h +++ b/src/globals.h @@ -1599,6 +1599,7 @@ EXTERN char e_listreq[] INIT(= N_("E714: 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"));
--- 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