0
0
mirror of https://github.com/vim/vim.git synced 2025-10-02 05:04:20 -04:00

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.
This commit is contained in:
Bram Moolenaar
2016-03-26 22:56:46 +01:00
parent fa8b2e173d
commit c4dcd60c76
4 changed files with 21 additions and 0 deletions

View File

@@ -1661,8 +1661,17 @@ channel_exe_cmd(channel_T *channel, int part, typval_T *argv)
if (STRCMP(cmd, "ex") == 0) if (STRCMP(cmd, "ex") == 0)
{ {
int save_called_emsg = called_emsg;
called_emsg = FALSE;
ch_logs(channel, "Executing ex command '%s'", (char *)arg); ch_logs(channel, "Executing ex command '%s'", (char *)arg);
++emsg_silent;
do_cmdline_cmd(arg); 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) else if (STRCMP(cmd, "normal") == 0)
{ {

View File

@@ -73,6 +73,11 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
print("sending: {0}".format(cmd)) print("sending: {0}".format(cmd))
self.request.sendall(cmd.encode('utf-8')) self.request.sendall(cmd.encode('utf-8'))
response = "ok" 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': elif decoded[1] == 'do normal':
# Send a normal command. # Send a normal command.
cmd = '["normal","G$s more\u001b"]' cmd = '["normal","G$s more\u001b"]'

View File

@@ -151,6 +151,11 @@ func s:communicate(port)
call assert_equal('added1', getline(line('$') - 1)) call assert_equal('added1', getline(line('$') - 1))
call assert_equal('added2', getline('$')) 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 assert_equal('ok', ch_evalexpr(handle, 'do normal', {'timeout': 100}))
call s:waitFor('"added more" == getline("$")') call s:waitFor('"added more" == getline("$")')
call assert_equal('added more', getline('$')) call assert_equal('added more', getline('$'))

View File

@@ -748,6 +748,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1662,
/**/ /**/
1661, 1661,
/**/ /**/