changeset 8424:be45d4921f1f v7.4.1503

commit https://github.com/vim/vim/commit/839fd11d7ed1a96bace3159c4d1861658864aae3 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 6 21:34:03 2016 +0100 patch 7.4.1503 Problem: Crash when using ch_getjob(). (Damien) Solution: Check for a NULL job.
author Christian Brabandt <cb@256bit.org>
date Sun, 06 Mar 2016 21:45:04 +0100
parents a7245a1fb5a7
children dcb1b9c15ed1
files src/eval.c src/testdir/test_channel.vim src/version.c
diffstat 3 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -15249,6 +15249,7 @@ f_job_start(typval_T *argvars UNUSED, ty
 #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, ch
 #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
--- 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!'))
--- 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,