channel.c: Prevent channel_destroy_early() from freeing uninitialized rpc stuff

Without this patch the following commands would crash:
    :call rpcstart('unknown_command')

    :set sh=unknown_command
    :call jobstart('ls',{'rpc':1})
This commit is contained in:
oni-link
2018-07-14 20:59:22 +02:00
parent 4874214139
commit c180741189

View File

@@ -288,7 +288,6 @@ Channel *channel_job_start(char **argv, CallbackReader on_stdout,
chan->on_stdout = on_stdout; chan->on_stdout = on_stdout;
chan->on_stderr = on_stderr; chan->on_stderr = on_stderr;
chan->on_exit = on_exit; chan->on_exit = on_exit;
chan->is_rpc = rpc;
if (pty) { if (pty) {
if (detach) { if (detach) {
@@ -326,7 +325,7 @@ Channel *channel_job_start(char **argv, CallbackReader on_stdout,
has_out = true; has_out = true;
has_err = false; has_err = false;
} else { } else {
has_out = chan->is_rpc || callback_reader_set(chan->on_stdout); has_out = rpc || callback_reader_set(chan->on_stdout);
has_err = callback_reader_set(chan->on_stderr); has_err = callback_reader_set(chan->on_stderr);
} }
int status = process_spawn(proc, true, has_out, has_err); int status = process_spawn(proc, true, has_out, has_err);
@@ -347,7 +346,7 @@ Channel *channel_job_start(char **argv, CallbackReader on_stdout,
rstream_init(&proc->out, 0); rstream_init(&proc->out, 0);
} }
if (chan->is_rpc) { if (rpc) {
// the rpc takes over the in and out streams // the rpc takes over the in and out streams
rpc_start(chan); rpc_start(chan);
} else { } else {