0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 7.4.1288

Problem:    ch_sendexpr() does not use JS encoding.
Solution:   Use the encoding that fits the channel mode.  Refuse using
            ch_sendexpr() on a raw channel.
This commit is contained in:
Bram Moolenaar
2016-02-07 21:59:26 +01:00
parent 74f5e65bcc
commit ae8eb3ca92
4 changed files with 36 additions and 1 deletions

View File

@@ -1514,4 +1514,17 @@ set_ref_in_channel(int copyID)
}
return abort;
}
/*
* Return the mode of channel "idx".
* If "idx" is invalid returns MODE_JSON.
*/
ch_mode_T
channel_get_mode(int idx)
{
if (idx < 0 || idx >= channel_count)
return MODE_JSON;
return channels[idx].ch_mode;
}
#endif /* FEAT_CHANNEL */

View File

@@ -9924,7 +9924,10 @@ send_common(typval_T *argvars, char_u *text, int id, char *fun)
ch_idx = get_channel_arg(&argvars[0]);
if (ch_idx < 0)
{
EMSG(_(e_invarg));
return -1;
}
if (argvars[2].v_type != VAR_UNKNOWN)
{
@@ -9952,13 +9955,29 @@ f_ch_sendexpr(typval_T *argvars, typval_T *rettv)
typval_T *listtv;
int ch_idx;
int id;
ch_mode_T ch_mode;
/* return an empty string by default */
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
ch_idx = get_channel_arg(&argvars[0]);
if (ch_idx < 0)
{
EMSG(_(e_invarg));
return;
}
ch_mode = channel_get_mode(ch_idx);
if (ch_mode == MODE_RAW)
{
EMSG(_("E912: cannot use ch_sendexpr() with a raw channel"));
return;
}
id = channel_get_id();
text = json_encode_nr_expr(id, &argvars[1], 0);
text = json_encode_nr_expr(id, &argvars[1],
ch_mode == MODE_JS ? JSON_JS : 0);
if (text == NULL)
return;

View File

@@ -24,4 +24,5 @@ int channel_select_setup(int maxfd_in, void *rfds_in);
int channel_select_check(int ret_in, void *rfds_in);
int channel_parse_messages(void);
int set_ref_in_channel(int copyID);
ch_mode_T channel_get_mode(int idx);
/* vim: set ft=c : */

View File

@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1288,
/**/
1287,
/**/