summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2018-12-20 15:27:03 +0000
committerRalf <ralf@linux1.fritz.box>2019-01-05 11:41:58 +0100
commit88032367a960c96989a964006d28aa2f6851e4a8 (patch)
tree54cd08a9dfa702711235e2124eda2b8b8eeba12d
parent5b72329d7d5947e0613a69a4b2d69975bd4a5b46 (diff)
downloaddbus-88032367a960c96989a964006d28aa2f6851e4a8.tar.gz
dbus-spawn: Don't take ownership of envp
It's unexpected for a function to take ownership of its arguments without indicating that in its name, or at least documenting it. The only caller with envp != NULL is in bus_activation_activate_service(), which has been updated. Based on part of a larger commit by Ralf Habacker. Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r--bus/activation.c1
-rw-r--r--dbus/dbus-spawn-unix.c4
-rw-r--r--dbus/dbus-spawn-win.c18
-rw-r--r--dbus/dbus-spawn.h2
4 files changed, 6 insertions, 19 deletions
diff --git a/bus/activation.c b/bus/activation.c
index 05dbfce4..30950636 100644
--- a/bus/activation.c
+++ b/bus/activation.c
@@ -2301,6 +2301,7 @@ bus_activation_activate_service (BusActivation *activation,
}
dbus_free_string_array (argv);
+ dbus_free_string_array (envp);
envp = NULL;
_dbus_assert (pending_activation->babysitter != NULL);
diff --git a/dbus/dbus-spawn-unix.c b/dbus/dbus-spawn-unix.c
index b6a4acd5..742c3a7a 100644
--- a/dbus/dbus-spawn-unix.c
+++ b/dbus/dbus-spawn-unix.c
@@ -1269,7 +1269,7 @@ dbus_bool_t
_dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
const char *log_name,
char * const *argv,
- char **env,
+ char * const *env,
DBusSpawnFlags flags,
DBusSpawnChildSetupFunc child_setup,
void *user_data,
@@ -1513,8 +1513,6 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
else
_dbus_babysitter_unref (sitter);
- dbus_free_string_array (env);
-
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
return TRUE;
diff --git a/dbus/dbus-spawn-win.c b/dbus/dbus-spawn-win.c
index c4b356c5..ee03102f 100644
--- a/dbus/dbus-spawn-win.c
+++ b/dbus/dbus-spawn-win.c
@@ -68,7 +68,6 @@ struct DBusBabysitter
int argc;
char **argv;
- char **envp;
HANDLE thread_handle;
HANDLE child_handle;
@@ -127,7 +126,6 @@ _dbus_babysitter_new (void)
sitter->argc = 0;
sitter->argv = NULL;
- sitter->envp = NULL;
sitter->watches = _dbus_watch_list_new ();
if (sitter->watches == NULL)
@@ -224,16 +222,6 @@ _dbus_babysitter_unref (DBusBabysitter *sitter)
sitter->argv = NULL;
}
- if (sitter->envp != NULL)
- {
- char **e = sitter->envp;
-
- while (*e)
- dbus_free (*e++);
- dbus_free (sitter->envp);
- sitter->envp = NULL;
- }
-
if (sitter->child_handle != NULL)
{
CloseHandle (sitter->child_handle);
@@ -636,7 +624,7 @@ dbus_bool_t
_dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
const char *log_name,
char * const *argv,
- char **envp,
+ char * const *envp,
DBusSpawnFlags flags _DBUS_GNUC_UNUSED,
DBusSpawnChildSetupFunc child_setup _DBUS_GNUC_UNUSED,
void *user_data _DBUS_GNUC_UNUSED,
@@ -711,13 +699,13 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
_DBUS_SET_OOM (error);
goto out0;
}
- sitter->envp = envp;
PING();
_dbus_verbose ("babysitter: spawn child '%s'\n", sitter->argv[0]);
PING();
- handle = _dbus_spawn_program (sitter->log_name, sitter->argv, sitter->envp);
+ handle = _dbus_spawn_program (sitter->log_name, sitter->argv,
+ (char **) envp);
PING();
if (handle != INVALID_HANDLE_VALUE)
diff --git a/dbus/dbus-spawn.h b/dbus/dbus-spawn.h
index b36b1d86..03458d0a 100644
--- a/dbus/dbus-spawn.h
+++ b/dbus/dbus-spawn.h
@@ -47,7 +47,7 @@ typedef enum {
dbus_bool_t _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
const char *log_name,
char * const *argv,
- char **env,
+ char * const *env,
DBusSpawnFlags flags,
DBusSpawnChildSetupFunc child_setup,
void *user_data,