diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-06 21:34:03 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-06 21:34:03 +0100 |
commit | 839fd11d7ed1a96bace3159c4d1861658864aae3 (patch) | |
tree | a1d3ac933bfc82942aad2074480322d156e81fcd /src | |
parent | 99ef06296f3c37490511c03786a2c8672e015c56 (diff) | |
download | vim-839fd11d7ed1a96bace3159c4d1861658864aae3.zip |
patch 7.4.1503
Problem: Crash when using ch_getjob(). (Damien)
Solution: Check for a NULL job.
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 7 | ||||
-rw-r--r-- | src/testdir/test_channel.vim | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index 23154061c..510dd128d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -15249,6 +15249,7 @@ f_job_start(typval_T *argvars UNUSED, typval_T *rettv) #endif #ifdef FEAT_CHANNEL + /* If the channel is reading from a buffer, write lines now. */ channel_write_in(job->jv_channel); #endif @@ -22601,7 +22602,11 @@ get_tv_string_buf_chk(typval_T *varp, char_u *buf) #ifdef FEAT_JOB { job_T *job = varp->vval.v_job; - char *status = job->jv_status == JOB_FAILED ? "fail" + char *status; + + if (job == NULL) + return (char_u *)"no process"; + status = job->jv_status == JOB_FAILED ? "fail" : job->jv_status == JOB_ENDED ? "dead" : "run"; # ifdef UNIX diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim index 31a4ff6eb..5133a2496 100644 --- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -108,6 +108,10 @@ func s:communicate(port) call assert_false(1, "Can't open channel") return endif + if has('job') + " check that no job is handled correctly + call assert_equal('no process', string(ch_getjob(handle))) + endif " Simple string request and reply. call assert_equal('got it', ch_evalexpr(handle, 'hello!')) diff --git a/src/version.c b/src/version.c index 4d8c52500..92fb02a7d 100644 --- a/src/version.c +++ b/src/version.c @@ -744,6 +744,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1503, +/**/ 1502, /**/ 1501, |