diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-03-19 21:44:37 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-03-19 21:44:37 +0100 |
commit | 42f652f733550a0d8bc9b030c9a5a62e7e2d8668 (patch) | |
tree | 3831ddc50f8806904a4bc601fbe2ee6daa029a35 /src/os_win32.c | |
parent | f05fa378229004fb64493b411b864709ce7da453 (diff) | |
download | vim-git-42f652f733550a0d8bc9b030c9a5a62e7e2d8668.tar.gz |
patch 8.0.1617: Win32: :shell command in the GUI crashesv8.0.1617
Problem: Win32: :shell command in the GUI crashes.
Solution: Handle the situation that "cmd" is NULL. (Yasuhiro Matsumoto,
closes #2721)
Diffstat (limited to 'src/os_win32.c')
-rw-r--r-- | src/os_win32.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/os_win32.c b/src/os_win32.c index c3f3f687e..b70a0025d 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -4800,15 +4800,25 @@ mch_call_shell_terminal( aco_save_T aco; oparg_T oa; /* operator arguments */ - cmdlen = STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10; - + if (cmd == NULL) + cmdlen = STRLEN(p_sh) + 1; + else + cmdlen = STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10; newcmd = lalloc(cmdlen, TRUE); if (newcmd == NULL) return 255; - vim_snprintf((char *)newcmd, cmdlen, "%s %s %s", p_sh, p_shcf, cmd); + if (cmd == NULL) + { + STRCPY(newcmd, p_sh); + ch_log(NULL, "starting terminal to run a shell"); + } + else + { + vim_snprintf((char *)newcmd, cmdlen, "%s %s %s", p_sh, p_shcf, cmd); + ch_log(NULL, "starting terminal for system command '%s'", cmd); + } init_job_options(&opt); - ch_log(NULL, "starting terminal for system command '%s'", cmd); argvar[0].v_type = VAR_STRING; argvar[0].vval.v_string = newcmd; |