Skip to content

Commit c4dcd60

Browse files
committed
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.
1 parent fa8b2e1 commit c4dcd60

4 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/channel.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,8 +1661,17 @@ channel_exe_cmd(channel_T *channel, int part, typval_T *argv)
16611661

16621662
if (STRCMP(cmd, "ex") == 0)
16631663
{
1664+
int save_called_emsg = called_emsg;
1665+
1666+
called_emsg = FALSE;
16641667
ch_logs(channel, "Executing ex command '%s'", (char *)arg);
1668+
++emsg_silent;
16651669
do_cmdline_cmd(arg);
1670+
--emsg_silent;
1671+
if (called_emsg)
1672+
ch_logs(channel, "Ex command error: '%s'",
1673+
(char *)get_vim_var_str(VV_ERRMSG));
1674+
called_emsg = save_called_emsg;
16661675
}
16671676
else if (STRCMP(cmd, "normal") == 0)
16681677
{

src/testdir/test_channel.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ def handle(self):
7373
print("sending: {0}".format(cmd))
7474
self.request.sendall(cmd.encode('utf-8'))
7575
response = "ok"
76+
elif decoded[1] == 'bad command':
77+
cmd = '["ex","foo bar"]'
78+
print("sending: {0}".format(cmd))
79+
self.request.sendall(cmd.encode('utf-8'))
80+
response = "ok"
7681
elif decoded[1] == 'do normal':
7782
# Send a normal command.
7883
cmd = '["normal","G$s more\u001b"]'

src/testdir/test_channel.vim

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ func s:communicate(port)
151151
call assert_equal('added1', getline(line('$') - 1))
152152
call assert_equal('added2', getline('$'))
153153

154+
" Request command "foo bar", which fails silently.
155+
call assert_equal('ok', ch_evalexpr(handle, 'bad command'))
156+
call s:waitFor('v:errmsg =~ "E492"')
157+
call assert_true(v:errmsg =~ 'E492:.*foo bar')
158+
154159
call assert_equal('ok', ch_evalexpr(handle, 'do normal', {'timeout': 100}))
155160
call s:waitFor('"added more" == getline("$")')
156161
call assert_equal('added more', getline('$'))

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,8 @@ static char *(features[]) =
748748

749749
static int included_patches[] =
750750
{ /* Add new patch number below this line */
751+
/**/
752+
1662,
751753
/**/
752754
1661,
753755
/**/

0 commit comments

Comments
 (0)