diff options
author | Simon McVittie <smcv@collabora.com> | 2018-12-20 15:27:03 +0000 |
---|---|---|
committer | Ralf <ralf@linux1.fritz.box> | 2019-01-05 11:41:58 +0100 |
commit | 88032367a960c96989a964006d28aa2f6851e4a8 (patch) | |
tree | 54cd08a9dfa702711235e2124eda2b8b8eeba12d | |
parent | 5b72329d7d5947e0613a69a4b2d69975bd4a5b46 (diff) | |
download | dbus-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.c | 1 | ||||
-rw-r--r-- | dbus/dbus-spawn-unix.c | 4 | ||||
-rw-r--r-- | dbus/dbus-spawn-win.c | 18 | ||||
-rw-r--r-- | dbus/dbus-spawn.h | 2 |
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, |