changeset 8070:e4c3f6720b03 v7.4.1329

commit https://github.com/vim/vim/commit/5cefd4098204b4677387511b586673649f2fab48 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Feb 16 12:44:26 2016 +0100 patch 7.4.1329 Problem: Crash when using channel that failed to open. Solution: Check for NULL. Update messages. (Yukihiro Nakadaira)
author Christian Brabandt <cb@256bit.org>
date Tue, 16 Feb 2016 12:45:05 +0100
parents 0df672ac12da
children a4cd495eb365
files src/channel.c src/eval.c src/testdir/test_channel.vim src/version.c
diffstat 4 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -634,7 +634,7 @@ channel_open(char *hostname, int port_in
 	    {
 		/* 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);
--- a/src/eval.c
+++ b/src/eval.c
@@ -21828,7 +21828,10 @@ get_tv_string_buf_chk(typval_T *varp, ch
 		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:
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -748,6 +748,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1329,
+/**/
     1328,
 /**/
     1327,