]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
dbus-spawn: Don't take ownership of envp
authorSimon McVittie <smcv@collabora.com>
Thu, 20 Dec 2018 15:27:03 +0000 (15:27 +0000)
committerRalf <ralf@linux1.fritz.box>
Sat, 5 Jan 2019 10:41:58 +0000 (11:41 +0100)
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>
bus/activation.c
dbus/dbus-spawn-unix.c
dbus/dbus-spawn-win.c
dbus/dbus-spawn.h

index 05dbfce4604eecbd1cfd25e08a469afda6915034..309506364212e2e8ceac5270ce315ca35d322bf3 100644 (file)
@@ -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);
index b6a4acd53c73ee1c83a45c0df67bddddc4eda881..742c3a7af3af4b4a8905854dda1f666963ee904e 100644 (file)
@@ -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;
index c4b356c59cd97f9143e82c750af63ac57db4c447..ee03102f15e5cbc08520bf4d91c823e3423c9456 100644 (file)
@@ -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)
index b36b1d86f8440e46f04f5d2136e2d9cbf4d7470a..03458d0a5ffa3a3f1fa48328f8da960cdbf55d3d 100644 (file)
@@ -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,