diff --git a/src/lib/core/popen.c b/src/lib/core/popen.c index 3ba1e2a48c2b4b0262780f820291ed69a1c3633c..089c848301d27ebc370edcc4f236b95eec9ab5c8 100644 --- a/src/lib/core/popen.c +++ b/src/lib/core/popen.c @@ -154,7 +154,7 @@ handle_new(struct popen_opts *opts) for (i = 0; i < opts->nr_argv; i++) { if (opts->argv[i] == NULL) continue; - size += strlen(opts->argv[i]) + 1; + size += strlen(opts->argv[i]) + 3; } handle = malloc(sizeof(*handle) + size); @@ -168,8 +168,13 @@ handle_new(struct popen_opts *opts) for (i = 0; i < opts->nr_argv-1; i++) { if (opts->argv[i] == NULL) continue; + bool is_multiword = strchr(opts->argv[i], ' ') != NULL; + if (is_multiword) + *pos++ = '\''; strcpy(pos, opts->argv[i]); pos += strlen(opts->argv[i]); + if (is_multiword) + *pos++ = '\''; *pos++ = ' '; } pos[-1] = '\0';