summaryrefslogtreecommitdiffstats
path: root/osdep/subprocess-win.c
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/subprocess-win.c')
-rw-r--r--osdep/subprocess-win.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/osdep/subprocess-win.c b/osdep/subprocess-win.c
index fc5db081f8..211f407db1 100644
--- a/osdep/subprocess-win.c
+++ b/osdep/subprocess-win.c
@@ -83,12 +83,14 @@ static void write_arg(bstr *cmdline, char *arg)
// Convert an array of arguments to a properly escaped command-line string
static wchar_t *write_cmdline(void *ctx, char **argv)
{
+ // argv[0] should always be quoted. Otherwise, arguments may be interpreted
+ // as part of the program name. Also, it can't contain escape sequences.
bstr cmdline = {0};
+ bstr_xappend_asprintf(NULL, &cmdline, "\"%s\"", argv[0]);
- for (int i = 0; argv[i]; i++) {
+ for (int i = 1; argv[i]; i++) {
+ bstr_xappend(NULL, &cmdline, bstr0(" "));
write_arg(&cmdline, argv[i]);
- if (argv[i + 1])
- bstr_xappend(NULL, &cmdline, bstr0(" "));
}
wchar_t *wcmdline = mp_from_utf8(ctx, cmdline.start);