Mercurial > vim
changeset 22618:c2d8b596dd0f v8.2.1857
patch 8.2.1857: Vim9: using job_status() on an unused var gives an error
Commit: https://github.com/vim/vim/commit/218450ad5ea1f9f033b06754a29502d86100ff65
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Oct 17 18:51:52 2020 +0200
patch 8.2.1857: Vim9: using job_status() on an unused var gives an error
Problem: Vim9: using job_status() on an unused var gives an error.
Solution: Return "fail". (closes https://github.com/vim/vim/issues/7158)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 17 Oct 2020 19:00:05 +0200 |
parents | c1bb78e32bf1 |
children | 398e92912dcb |
files | src/job.c src/testdir/test_vim9_assign.vim src/version.c |
diffstat | 3 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/job.c +++ b/src/job.c @@ -1894,12 +1894,21 @@ f_job_start(typval_T *argvars, typval_T void f_job_status(typval_T *argvars, typval_T *rettv) { - job_T *job = get_job_arg(&argvars[0]); + if (argvars[0].v_type == VAR_JOB && argvars[0].vval.v_job == NULL) + { + // A job that never started returns "fail". + rettv->v_type = VAR_STRING; + rettv->vval.v_string = vim_strsave((char_u *)"fail"); + } + else + { + job_T *job = get_job_arg(&argvars[0]); - if (job != NULL) - { - rettv->v_type = VAR_STRING; - rettv->vval.v_string = vim_strsave((char_u *)job_status(job)); + if (job != NULL) + { + rettv->v_type = VAR_STRING; + rettv->vval.v_string = vim_strsave((char_u *)job_status(job)); + } } }
--- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -74,7 +74,11 @@ def Test_assignment() if has('channel') var chan1: channel + assert_equal('fail', ch_status(chan1)) + var job1: job + assert_equal('fail', job_status(job1)) + # calling job_start() is in test_vim9_fails.vim, it causes leak reports endif if has('float')