Patch 7.4.1255
Problem: Crash for channel "eval" command without third argument.
Solution: Check for missing argument.
Files: src/channel.c, src/testdir/test_channel.vim,
src/testdir/test_channel.py
*** ../vim-7.4.1254/src/channel.c 2016-02-03 23:25:03.291954920 +0100
--- src/channel.c 2016-02-03 23:51:44.327052937 +0100
***************
*** 694,700 ****
{
int is_eval = cmd[1] == 'v';
! if (is_eval && arg3->v_type != VAR_NUMBER)
{
if (p_verbose > 2)
EMSG("E904: third argument for eval must be a number");
--- 694,700 ----
{
int is_eval = cmd[1] == 'v';
! if (is_eval && (arg3 == NULL || arg3->v_type != VAR_NUMBER))
{
if (p_verbose > 2)
EMSG("E904: third argument for eval must be a number");
***************
*** 774,780 ****
typval_T *arg3 = NULL;
char_u *cmd = typetv->vval.v_string;
! /* ["cmd", arg] */
if (list->lv_len == 3)
arg3 = &list->lv_last->li_tv;
channel_exe_cmd(idx, cmd, &argv[1], arg3);
--- 774,780 ----
typval_T *arg3 = NULL;
char_u *cmd = typetv->vval.v_string;
! /* ["cmd", arg] or ["cmd", arg, arg] */
if (list->lv_len == 3)
arg3 = &list->lv_last->li_tv;
channel_exe_cmd(idx, cmd, &argv[1], arg3);
*** ../vim-7.4.1254/src/testdir/test_channel.vim 2016-02-03
23:25:03.295954878 +0100
--- src/testdir/test_channel.vim 2016-02-03 23:56:01.564350023 +0100
***************
*** 90,95 ****
--- 90,99 ----
call assert_equal('ok', ch_sendexpr(handle, 'eval-fails'))
call assert_equal([-2, 'ERROR'], ch_sendexpr(handle, 'eval-result'))
+ " Send a bad eval request. There will be no response.
+ call assert_equal('ok', ch_sendexpr(handle, 'eval-bad'))
+ call assert_equal([-2, 'ERROR'], ch_sendexpr(handle, 'eval-result'))
+
" make the server quit, can't check if this works, should not hang.
call ch_sendexpr(handle, '!quit!', 0)
*** ../vim-7.4.1254/src/testdir/test_channel.py 2016-02-03 23:25:03.295954878
+0100
--- src/testdir/test_channel.py 2016-02-03 23:55:17.352814596 +0100
***************
*** 68,75 ****
# simply send back a string
response = "got it"
elif decoded[1] == 'make change':
! # Send two ex commands at the same time, before
replying to
! # the request.
cmd = '["ex","call append(\\"$\\",\\"added1\\")"]'
cmd += '["ex","call append(\\"$\\",\\"added2\\")"]'
print("sending: {}".format(cmd))
--- 68,75 ----
# simply send back a string
response = "got it"
elif decoded[1] == 'make change':
! # Send two ex commands at the same time, before
! # replying to the request.
cmd = '["ex","call append(\\"$\\",\\"added1\\")"]'
cmd += '["ex","call append(\\"$\\",\\"added2\\")"]'
print("sending: {}".format(cmd))
***************
*** 87,92 ****
--- 87,98 ----
print("sending: {}".format(cmd))
self.request.sendall(cmd.encode('utf-8'))
response = "ok"
+ elif decoded[1] == 'eval-bad':
+ # Send an eval request missing the third argument.
+ cmd = '["eval","xxx"]'
+ print("sending: {}".format(cmd))
+ self.request.sendall(cmd.encode('utf-8'))
+ response = "ok"
elif decoded[1] == 'eval-result':
# Send back the last received eval result.
response = last_eval
*** ../vim-7.4.1254/src/version.c 2016-02-03 23:25:03.295954878 +0100
--- src/version.c 2016-02-03 23:52:56.690292612 +0100
***************
*** 744,745 ****
--- 744,747 ----
{ /* Add new patch number below this line */
+ /**/
+ 1255,
/**/
--
hundred-and-one symptoms of being an internet addict:
126. You brag to all of your friends about your date Saturday night...but
you don't tell them it was only in a chat room.
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.