summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2021-12-04 13:53:10 +0100
committerRalf Habacker <ralf.habacker@freenet.de>2021-12-06 10:09:20 +0000
commitb9a77443100dd06faa37ba495da70ae37700f9f2 (patch)
tree0c96097584d492fa3be08001a1906b2b6141e435
parent649f46642bfbdd5bf2999041f2576737a961a24b (diff)
downloaddbus-b9a77443100dd06faa37ba495da70ae37700f9f2.tar.gz
protect_argv(): Only set return variable in success case
This avoids overwriting the variable even if there is no result.
-rw-r--r--dbus/dbus-spawn-win.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c
index 86e5324c..6037b9d1 100644
--- a/dbus/dbus-spawn-win.c
+++ b/dbus/dbus-spawn-win.c
@@ -368,15 +368,16 @@ protect_argv (char * const *argv,
{
int i;
int argc = 0;
+ char **args = NULL;
while (argv[argc])
++argc;
- *new_argv = dbus_malloc ((argc + 1) * sizeof (char *));
- if (*new_argv == NULL)
+ args = dbus_malloc ((argc + 1) * sizeof (char *));
+ if (args == NULL)
return -1;
for (i = 0; i < argc; i++)
- (*new_argv)[i] = NULL;
+ (args)[i] = NULL;
/* Quote each argv element if necessary, so that it will get
* reconstructed correctly in the C runtime startup code. Note that
@@ -413,7 +414,7 @@ protect_argv (char * const *argv,
p++;
}
- q = (*new_argv)[i] = dbus_malloc (len + need_dblquotes*2 + 1);
+ q = args[i] = dbus_malloc (len + need_dblquotes*2 + 1);
if (q == NULL)
return -1;
@@ -443,9 +444,10 @@ protect_argv (char * const *argv,
if (need_dblquotes)
*q++ = '"';
*q++ = '\0';
- /* printf ("argv[%d]:%s, need_dblquotes:%s len:%d => %s\n", i, argv[i], need_dblquotes?"TRUE":"FALSE", len, (*new_argv)[i]); */
+ /* printf ("argv[%d]:%s, need_dblquotes:%s len:%d => %s\n", i, argv[i], need_dblquotes?"TRUE":"FALSE", len, (args)[i]); */
}
- (*new_argv)[argc] = NULL;
+ args[argc] = NULL;
+ *new_argv = args;
return argc;
}