To: vim_dev@googlegroups.com Subject: Patch 7.4.1662 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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. Files: src/channel.c, src/testdir/test_channel.vim, src/testdir/test_channel.py *** ../vim-7.4.1661/src/channel.c 2016-03-21 22:30:52.859454907 +0100 --- src/channel.c 2016-03-26 22:45:35.410530251 +0100 *************** *** 1661,1668 **** --- 1661,1677 ---- 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) { *** ../vim-7.4.1661/src/testdir/test_channel.vim 2016-03-26 22:19:23.866720901 +0100 --- src/testdir/test_channel.vim 2016-03-26 22:56:12.527949442 +0100 *************** *** 151,156 **** --- 151,161 ---- 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('$')) *** ../vim-7.4.1661/src/testdir/test_channel.py 2016-03-26 22:19:23.866720901 +0100 --- src/testdir/test_channel.py 2016-03-26 22:36:49.271970150 +0100 *************** *** 73,78 **** --- 73,83 ---- 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"]' *** ../vim-7.4.1661/src/version.c 2016-03-26 22:19:23.866720901 +0100 --- src/version.c 2016-03-26 22:53:37.145554051 +0100 *************** *** 750,751 **** --- 750,753 ---- { /* Add new patch number below this line */ + /**/ + 1662, /**/ -- hundred-and-one symptoms of being an internet addict: 135. You cut classes or miss work so you can stay home and browse the web. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///