From 3697e568badf37c86d1406a5c31e3652e798eca2 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 18 Aug 2015 13:42:20 +0200 Subject: [PATCH] core: fix impl_manager_get_devices() to skip non-exported objects Must skip over NULL paths. Also, the previous version leaked the object-paths as g_variant_new() doesn't take ownership. Fixes: 34ba4e14b8674dc74327975159e101710ebd5403 --- src/nm-manager.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index e4ae08d6c8..4915a89e06 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -2016,18 +2016,23 @@ impl_manager_get_devices (NMManager *self, GDBusMethodInvocation *context) { NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); - GPtrArray *paths; + gs_free const char **paths = NULL; + guint i; GSList *iter; - paths = g_ptr_array_sized_new (g_slist_length (priv->devices) + 1); + paths = g_new (const char *, g_slist_length (priv->devices) + 1); - for (iter = priv->devices; iter; iter = iter->next) - g_ptr_array_add (paths, g_strdup (nm_exported_object_get_path (NM_EXPORTED_OBJECT (iter->data)))); - g_ptr_array_add (paths, NULL); + for (i = 0, iter = priv->devices; iter; iter = iter->next) { + const char *path; + + path = nm_exported_object_get_path (NM_EXPORTED_OBJECT (iter->data)); + if (path) + paths[i++] = path; + } + paths[i++] = NULL; g_dbus_method_invocation_return_value (context, - g_variant_new ("(^ao)", (char **) paths->pdata)); - g_ptr_array_unref (paths); + g_variant_new ("(^ao)", (char **) paths)); } static void