Re: Crash with channel

2016-02-16 Fir de Conversatie Bram Moolenaar

Yukihiro Nakadaira wrote:

> Steps to reproduce:
>   :" 1
>   :echo ch_open("noserver")
> 
>   :" 2
>   :let c = ch_open("noserver")
>   :let d = c
> 
> 
> There is no NULL check for fail channel.
> And two typos in message.

Thanks!


-- 
This sentence is not sure that it exists, but if it does, it will
certainly consider the possibility that other sentences exist.

 /// Bram Moolenaar -- b...@moolenaar.net -- 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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Crash with channel

2016-02-15 Fir de Conversatie Yukihiro Nakadaira
Steps to reproduce:
  :" 1
  :echo ch_open("noserver")

  :" 2
  :let c = ch_open("noserver")
  :let d = c


There is no NULL check for fail channel.
And two typos in message.

diff --git a/src/channel.c b/src/channel.c
index d5d7ffb..003c933 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -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);
diff --git a/src/eval.c b/src/eval.c
index a90dd0b..e071085 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -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;
  }
@@ -22466,8 +22469,13 @@ copy_tv(typval_T *from, typval_T *to)
 #endif
  case VAR_CHANNEL:
 #ifdef FEAT_CHANNEL
- to->vval.v_channel = from->vval.v_channel;
- ++to->vval.v_channel->ch_refcount;
+ if (from->vval.v_channel == NULL)
+  to->vval.v_channel = NULL;
+ else
+ {
+  to->vval.v_channel = from->vval.v_channel;
+  ++to->vval.v_channel->ch_refcount;
+ }
  break;
 #endif
  case VAR_STRING:


-- 
Yukihiro Nakadaira - yukihiro.nakada...@gmail.com

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.