# HG changeset patch # User Christian Brabandt # Date 1459029605 -3600 # Node ID 4c38a4733578bb4c17efbd1160de9ea54ac869c1 # Parent bafdb038f07ab25427b4eb264c0beb36839b1019 commit https://github.com/vim/vim/commit/c4dcd60c76666bf113719f929709ad6120eb6528 Author: Bram Moolenaar Date: Sat Mar 26 22:56:46 2016 +0100 patch 7.4.1662 Problem: No test for an invalid Ex command on a channel. Solution: Test handling an invalid command gracefully. Avoid getting an error message, do write it to the channel log. diff --git a/src/channel.c b/src/channel.c --- a/src/channel.c +++ b/src/channel.c @@ -1661,8 +1661,17 @@ channel_exe_cmd(channel_T *channel, int if (STRCMP(cmd, "ex") == 0) { + int save_called_emsg = called_emsg; + + called_emsg = FALSE; ch_logs(channel, "Executing ex command '%s'", (char *)arg); + ++emsg_silent; do_cmdline_cmd(arg); + --emsg_silent; + if (called_emsg) + ch_logs(channel, "Ex command error: '%s'", + (char *)get_vim_var_str(VV_ERRMSG)); + called_emsg = save_called_emsg; } else if (STRCMP(cmd, "normal") == 0) { diff --git a/src/testdir/test_channel.py b/src/testdir/test_channel.py --- a/src/testdir/test_channel.py +++ b/src/testdir/test_channel.py @@ -73,6 +73,11 @@ class ThreadedTCPRequestHandler(socketse print("sending: {0}".format(cmd)) self.request.sendall(cmd.encode('utf-8')) response = "ok" + elif decoded[1] == 'bad command': + cmd = '["ex","foo bar"]' + print("sending: {0}".format(cmd)) + self.request.sendall(cmd.encode('utf-8')) + response = "ok" elif decoded[1] == 'do normal': # Send a normal command. cmd = '["normal","G$s more\u001b"]' diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim --- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -151,6 +151,11 @@ func s:communicate(port) call assert_equal('added1', getline(line('$') - 1)) call assert_equal('added2', getline('$')) + " Request command "foo bar", which fails silently. + call assert_equal('ok', ch_evalexpr(handle, 'bad command')) + call s:waitFor('v:errmsg =~ "E492"') + call assert_true(v:errmsg =~ 'E492:.*foo bar') + call assert_equal('ok', ch_evalexpr(handle, 'do normal', {'timeout': 100})) call s:waitFor('"added more" == getline("$")') call assert_equal('added more', getline('$')) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1662, +/**/ 1661, /**/ 1660,