diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2015-08-21 09:07:06 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2015-08-21 13:28:49 -0300 |
commit | 1beee0685d33adf15457927b2487e8f89da178a0 (patch) | |
tree | 38f251f3333a0e103391d78d9adfc076399ca8cf /src/nvim/eval.c | |
parent | 6e59b7b0e5cfe84db8629c728b942a5fea6bdda3 (diff) | |
download | rneovim-1beee0685d33adf15457927b2487e8f89da178a0.tar.gz rneovim-1beee0685d33adf15457927b2487e8f89da178a0.tar.bz2 rneovim-1beee0685d33adf15457927b2487e8f89da178a0.zip |
eval: Protect job callbacks from being redefined
ref: #3188
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index a5ab57785c..006601211e 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -18987,7 +18987,7 @@ void ex_function(exarg_T *eap) emsg_funcname(e_funcexts, name); goto erret; } - if (fp->uf_calls > 0) { + if (fp->uf_refcount > 1 || fp->uf_calls > 0) { emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"), name); goto erret; @@ -21136,14 +21136,18 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv) { data->refcount++; Process *proc = (Process *)&data->proc; + char *cmd = xstrdup(proc->argv[0]); if (!process_spawn(proc)) { - EMSG(_(e_jobexe)); + EMSG2(_(e_jobspawn), cmd); + xfree(cmd); if (proc->type == kProcessTypePty) { xfree(data->proc.pty.term_name); - free_term_job_data(data); } + rettv->vval.v_number = proc->status; + term_job_data_decref(data); return false; } + xfree(cmd); data->id = current_job_id++; wstream_init(proc->in, 0); |