summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Pitt <martin.pitt@ubuntu.com>2015-01-13 16:13:21 +0100
committerMartin Pitt <martin.pitt@ubuntu.com>2015-01-13 16:13:21 +0100
commitb4cdfcafff171a427debfeaea72b51c9f1ab378e (patch)
tree0e150a605e9b44e3afb916bf8c7bcdeda9990fc6
parent86bcf135519742ebd9607f6f8208cb7d3319d0ee (diff)
Fix crash in udisks_client_finalize()HEADmaster
When calling udisks_object_manager_client_new_for_bus_sync() in initable_init() fails, the _finalize() was previously trying to call g_signal_handlers_disconnect_by_func() and g_object_unref() on NULL objects. Check this explicitly. https://bugs.freedesktop.org/show_bug.cgi?id=77134
-rw-r--r--udisks/udisksclient.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c
index 0507796..0f2d7b2 100644
--- a/udisks/udisksclient.c
+++ b/udisks/udisksclient.c
@@ -133,22 +133,26 @@ udisks_client_finalize (GObject *object)
if (client->initialization_error != NULL)
g_error_free (client->initialization_error);
- g_signal_handlers_disconnect_by_func (client->object_manager,
- G_CALLBACK (on_object_added),
- client);
- g_signal_handlers_disconnect_by_func (client->object_manager,
- G_CALLBACK (on_object_removed),
- client);
- g_signal_handlers_disconnect_by_func (client->object_manager,
- G_CALLBACK (on_interface_added),
- client);
- g_signal_handlers_disconnect_by_func (client->object_manager,
- G_CALLBACK (on_interface_removed),
- client);
- g_signal_handlers_disconnect_by_func (client->object_manager,
- G_CALLBACK (on_interface_proxy_properties_changed),
- client);
- g_object_unref (client->object_manager);
+ /* might be NULL if failing early in the constructor */
+ if (client->object_manager != NULL)
+ {
+ g_signal_handlers_disconnect_by_func (client->object_manager,
+ G_CALLBACK (on_object_added),
+ client);
+ g_signal_handlers_disconnect_by_func (client->object_manager,
+ G_CALLBACK (on_object_removed),
+ client);
+ g_signal_handlers_disconnect_by_func (client->object_manager,
+ G_CALLBACK (on_interface_added),
+ client);
+ g_signal_handlers_disconnect_by_func (client->object_manager,
+ G_CALLBACK (on_interface_removed),
+ client);
+ g_signal_handlers_disconnect_by_func (client->object_manager,
+ G_CALLBACK (on_interface_proxy_properties_changed),
+ client);
+ g_object_unref (client->object_manager);
+ }
if (client->context != NULL)
g_main_context_unref (client->context);