# HG changeset patch # User Bram Moolenaar # Date 1602954005 -7200 # Node ID c2d8b596dd0f35910e6711f68b71b03a183cc112 # Parent c1bb78e32bf126612f999a1bd759a2d8897f126c 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 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) diff --git a/src/job.c b/src/job.c --- 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)); + } } } diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim --- 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') diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1857, +/**/ 1856, /**/ 1855,