]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1329 v7.4.1329
authorBram Moolenaar <Bram@vim.org>
Tue, 16 Feb 2016 11:44:26 +0000 (12:44 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 16 Feb 2016 11:44:26 +0000 (12:44 +0100)
Problem:    Crash when using channel that failed to open.
Solution:   Check for NULL.  Update messages. (Yukihiro Nakadaira)

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

index d5d7ffb49b3b81e9423ea18c02a492cc39cd3fce..003c93336e2794c3641df3a98f4a676d917f74a9 100644 (file)
@@ -634,7 +634,7 @@ channel_open(char *hostname, int port_in, int waittime, void (*close_cb)(void))
            {
                /* Get here when the server can't be found. */
                ch_error(NULL, "Cannot connect to port after retry\n");
-               PERROR(_("E899: Cannot connect to port after retry2"));
+               PERROR(_("E899: Cannot connect to port after retry"));
                sock_close(sd);
                channel_free(channel);
                return NULL;
@@ -1220,7 +1220,7 @@ channel_status(channel_T *channel)
     void
 channel_close(channel_T *channel)
 {
-    ch_log(channel, "Closing channel");
+    ch_log(channel, "Closing channel\n");
 
 #ifdef FEAT_GUI
     channel_gui_unregister(channel);
index a90dd0b732be6b8460c360d1b967291395b3c962..ff7f9a7bd68b89da15488535a39cce9c9e602fc6 100644 (file)
@@ -21828,7 +21828,10 @@ get_tv_string_buf_chk(typval_T *varp, char_u *buf)
                channel_T *channel = varp->vval.v_channel;
                char      *status = channel_status(channel);
 
-               vim_snprintf((char *)buf, NUMBUFLEN,
+               if (channel == NULL)
+                   vim_snprintf((char *)buf, NUMBUFLEN, "channel %s", status);
+               else
+                   vim_snprintf((char *)buf, NUMBUFLEN,
                                     "channel %d %s", channel->ch_id, status);
                return buf;
            }
@@ -22467,7 +22470,8 @@ copy_tv(typval_T *from, typval_T *to)
        case VAR_CHANNEL:
 #ifdef FEAT_CHANNEL
            to->vval.v_channel = from->vval.v_channel;
-           ++to->vval.v_channel->ch_refcount;
+           if (to->vval.v_channel != NULL)
+               ++to->vval.v_channel->ch_refcount;
            break;
 #endif
        case VAR_STRING:
index e7448faf091f10a058e52d1b792faf24f354bb38..7cc3f146f699bcc67a0375d88218838fc45fb8f2 100644 (file)
@@ -318,3 +318,9 @@ endfunc
 func Test_unlet_handle()
   call s:run_server('s:unlet_handle')
 endfunc
+
+func Test_open_fail()
+  silent! let ch = ch_open("noserver")
+  echo ch
+  let d = ch
+endfunc
index c880078a6c5555512a7ee9d9e5d98a272c493e1e..fc1c8824d90e87a7cdbfb6e23e118e1755063f50 100644 (file)
@@ -747,6 +747,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1329,
 /**/
     1328,
 /**/