]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1255 v7.4.1255
authorBram Moolenaar <Bram@vim.org>
Wed, 3 Feb 2016 22:59:43 +0000 (23:59 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 3 Feb 2016 22:59:43 +0000 (23:59 +0100)
Problem:    Crash for channel "eval" command without third argument.
Solution:   Check for missing argument.

src/channel.c
src/testdir/test_channel.py
src/testdir/test_channel.vim
src/version.c

index 9e15fe4551d1dc9b1f67ddc379bae743725d2c7d..b9a2a972fa3fe22614e579b57fcc99bcc95d8440 100644 (file)
@@ -694,7 +694,7 @@ channel_exe_cmd(int idx, char_u *cmd, typval_T *arg2, typval_T *arg3)
     {
        int is_eval = cmd[1] == 'v';
 
-       if (is_eval && arg3->v_type != VAR_NUMBER)
+       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,7 +774,7 @@ may_invoke_callback(int idx)
            typval_T    *arg3 = NULL;
            char_u      *cmd = typetv->vval.v_string;
 
-           /* ["cmd", arg] */
+           /* ["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);
index f1d774fd11436e9ab65a1f5b31a269760126a2d7..dbf9eb2c7b5b1053aba93a48000a50df5d6455c8 100644 (file)
@@ -68,8 +68,8 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
                         # 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.
+                        # 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,6 +87,12 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
                         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
index b416520e45e27b955b939475f42ee9bc523cbf75..3caf5d21d933bb37b8ecdca9501f57e1b134e7db 100644 (file)
@@ -90,6 +90,10 @@ func Test_communicate()
   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)
 
index 6a86d6a36ee973448c475591c8beab25165d52d0..0f87c416fd08fb4a82ba38e9d267759d8e8ee0a9 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1255,
 /**/
     1254,
 /**/