aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-02-21 19:08:08 +0000
committerChristian Grothoff <christian@grothoff.org>2012-02-21 19:08:08 +0000
commit7590a212861cd5cafeceba3c20c1e6c9528b880d (patch)
tree786dde5b1aa7ce44ca33e540ea447a8a911ed725 /src/util
parent49af729e1a919beeab18d29dc226c2fcb98499ed (diff)
downloadgnunet-7590a212861cd5cafeceba3c20c1e6c9528b880d.tar.gz
gnunet-7590a212861cd5cafeceba3c20c1e6c9528b880d.zip
LRN: Escape-trailing-slash-when-spawning-W32-process:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/os_priority.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/util/os_priority.c b/src/util/os_priority.c
index b1cf2fbff..64dce4ba3 100644
--- a/src/util/os_priority.c
+++ b/src/util/os_priority.c
@@ -638,7 +638,7 @@ GNUNET_OS_start_process_vap (struct GNUNET_DISK_PipeHandle *pipe_stdin,
638 char *cmd, *idx; 638 char *cmd, *idx;
639 STARTUPINFOW start; 639 STARTUPINFOW start;
640 PROCESS_INFORMATION proc; 640 PROCESS_INFORMATION proc;
641 int argc; 641 int argc, arg_count;
642 HANDLE stdin_handle; 642 HANDLE stdin_handle;
643 HANDLE stdout_handle; 643 HANDLE stdout_handle;
644 644
@@ -707,19 +707,24 @@ GNUNET_OS_start_process_vap (struct GNUNET_DISK_PipeHandle *pipe_stdin,
707 while (NULL != (arg = argv[argc++])) 707 while (NULL != (arg = argv[argc++]))
708 { 708 {
709 if (cmdlen == 0) 709 if (cmdlen == 0)
710 cmdlen = cmdlen + strlen (path) + 3; 710 cmdlen = cmdlen + strlen (path) + 4;
711 else 711 else
712 cmdlen = cmdlen + strlen (arg) + 3; 712 cmdlen = cmdlen + strlen (arg) + 4;
713 } 713 }
714 arg_count = argc;
714 715
715 cmd = idx = GNUNET_malloc (sizeof (char) * (cmdlen + 1)); 716 cmd = idx = GNUNET_malloc (sizeof (char) * (cmdlen + 1));
716 argc = 0; 717 argc = 0;
717 while (NULL != (arg = argv[argc++])) 718 while (NULL != (arg = argv[argc++]))
718 { 719 {
720 /* This is to escape trailing slash */
721 char arg_lastchar = arg[strlen (arg) - 1];
719 if (idx == cmd) 722 if (idx == cmd)
720 idx += sprintf (idx, "\"%s\" ", path); 723 idx += sprintf (idx, "\"%s%s\"%s", path,
724 arg_lastchar == '\\' ? "\\" : "", argc + 1 == arg_count ? "" : " ");
721 else 725 else
722 idx += sprintf (idx, "\"%s\" ", arg); 726 idx += sprintf (idx, "\"%s%s\"%s", arg,
727 arg_lastchar == '\\' ? "\\" : "", argc + 1 == arg_count ? "" : " ");
723 } 728 }
724 729
725 memset (&start, 0, sizeof (start)); 730 memset (&start, 0, sizeof (start));
@@ -1103,7 +1108,7 @@ GNUNET_OS_start_process_v (const SOCKTYPE *lsocks,
1103 arg = non_const_argv; 1108 arg = non_const_argv;
1104 while (*arg) 1109 while (*arg)
1105 { 1110 {
1106 cmdlen = cmdlen + strlen (*arg) + 3; 1111 cmdlen = cmdlen + strlen (*arg) + 4;
1107 arg++; 1112 arg++;
1108 } 1113 }
1109 1114
@@ -1112,7 +1117,9 @@ GNUNET_OS_start_process_v (const SOCKTYPE *lsocks,
1112 arg = non_const_argv; 1117 arg = non_const_argv;
1113 while (*arg) 1118 while (*arg)
1114 { 1119 {
1115 idx += sprintf (idx, "\"%s\" ", *arg); 1120 char arg_last_char = (*arg)[strlen (*arg) - 1];
1121 idx += sprintf (idx, "\"%s%s\"%s", *arg,
1122 arg_last_char == '\\' ? "\\" : "", *(arg + 1) ? " " : "");
1116 arg++; 1123 arg++;
1117 } 1124 }
1118 1125