# HG changeset patch # User Christian Brabandt # Date 1455623105 -3600 # Node ID e4c3f6720b0313cbcead01ca681975a7965e307c # Parent 0df672ac12daffcc085b5e46eefdb86780f3a936 commit https://github.com/vim/vim/commit/5cefd4098204b4677387511b586673649f2fab48 Author: Bram Moolenaar 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) diff --git a/src/channel.c b/src/channel.c --- 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); diff --git a/src/eval.c b/src/eval.c --- 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: diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim --- 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 diff --git a/src/version.c b/src/version.c --- 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,