summaryrefslogtreecommitdiff
path: root/src/os_win32.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-03-19 21:44:37 +0100
committerBram Moolenaar <Bram@vim.org>2018-03-19 21:44:37 +0100
commit42f652f733550a0d8bc9b030c9a5a62e7e2d8668 (patch)
tree3831ddc50f8806904a4bc601fbe2ee6daa029a35 /src/os_win32.c
parentf05fa378229004fb64493b411b864709ce7da453 (diff)
downloadvim-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.c18
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;