From 867d76ddb9b4231f36e85abd68c1ed26d834d039 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 23 Jan 2008 15:17:24 +0000 Subject: [PATCH] Escape arguments for Windows in shell-tools.c --- includes/shell-tools.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/includes/shell-tools.c b/includes/shell-tools.c index 29b2e2d..4aebaf9 100644 --- a/includes/shell-tools.c +++ b/includes/shell-tools.c @@ -59,7 +59,8 @@ int run(char *this, char *program, int argc, char** argv) { cmdline_len = 0; for(i = 1; i < argc; i++) { /* Note: play it safe and quote all argv strings */ - cmdline_len += 1 + strlen(argv[i]) + 2; + /* In the worst case we have to escape every character with a \ */ + cmdline_len += 1 + 2 * strlen(argv[i]) + 2; } new_cmdline = (char*)malloc(sizeof(char) * (cmdline_len + 1)); if (!new_cmdline) { @@ -73,6 +74,10 @@ int run(char *this, char *program, int argc, char** argv) { *ptr++ = '"'; src = argv[i]; while(*src) { + /* Escape any \ and " characters */ + if ((*src == '\\') || (*src == '"')) { + *ptr++ = '\\'; + } *ptr++ = *src++; } *ptr++ = '"'; -- 1.7.10.4