changeset 18937:ab97d1aea4aa v8.2.0029

patch 8.2.0029: MS-Windows: crash with empty job command Commit: https://github.com/vim/vim/commit/a27655ef6d0001c7c2265ea682455ec82acee826 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Dec 21 22:22:01 2019 +0100 patch 8.2.0029: MS-Windows: crash with empty job command Problem: MS-Windows: crash with empty job command. Solution: Check for NULL result. (Yasuhiro Matsumoto, closes https://github.com/vim/vim/issues/5390)
author Bram Moolenaar <Bram@vim.org>
date Sat, 21 Dec 2019 22:30:03 +0100
parents ddd9455af2d3
children a32de2d96944
files src/channel.c src/testdir/test_channel.vim src/version.c
diffstat 3 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -5947,6 +5947,11 @@ job_start(
 	if (win32_build_cmd(l, &ga) == FAIL)
 	    goto theend;
 	cmd = ga.ga_data;
+	if (cmd == NULL)
+	{
+	    emsg(_(e_invarg));
+	    goto theend;
+	}
 #endif
     }
 
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -1331,14 +1331,12 @@ func Ch_close_handle(port)
 endfunc
 
 func Test_close_handle()
-  call ch_log('Test_close_handle()')
   call s:run_server('Ch_close_handle')
 endfunc
 
 """"""""""
 
 func Test_open_fail()
-  call ch_log('Test_open_fail()')
   silent! let ch = ch_open("noserver")
   echo ch
   let d = ch
@@ -1360,7 +1358,6 @@ func Ch_open_delay(port)
 endfunc
 
 func Test_open_delay()
-  call ch_log('Test_open_delay()')
   " The server will wait half a second before creating the port.
   call s:run_server('Ch_open_delay', 'delay')
 endfunc
@@ -1384,7 +1381,6 @@ function Ch_test_call(port)
 endfunc
 
 func Test_call()
-  call ch_log('Test_call()')
   call s:run_server('Ch_test_call')
 endfunc
 
@@ -1473,7 +1469,6 @@ function Ch_test_close_callback(port)
 endfunc
 
 func Test_close_callback()
-  call ch_log('Test_close_callback()')
   call s:run_server('Ch_test_close_callback')
 endfunc
 
@@ -1495,7 +1490,6 @@ function Ch_test_close_partial(port)
 endfunc
 
 func Test_close_partial()
-  call ch_log('Test_close_partial()')
   call s:run_server('Ch_test_close_partial')
 endfunc
 
@@ -1712,7 +1706,6 @@ function Ch_test_close_lambda(port)
 endfunc
 
 func Test_close_lambda()
-  call ch_log('Test_close_lambda()')
   call s:run_server('Ch_test_close_lambda')
 endfunc
 
@@ -1965,6 +1958,12 @@ func Test_zz_nl_err_to_out_pipe()
   endtry
 endfunc
 
+func Test_empty_job()
+  " This was crashing on MS-Windows.
+  let job = job_start([""])
+  call WaitForAssert({-> assert_equal("dead", job_status(job))})
+endfunc
+
 " Do this last, it stops any channel log.
 func Test_zz_ch_log()
   call ch_logfile('Xlog', 'w')
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    29,
+/**/
     28,
 /**/
     27,