From 4c39e33cfe2c9d0bca9d7b89c37c26be563b94cb Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Tue, 17 May 2016 16:23:17 +0200 Subject: [PATCH 1/2] lib: Make up_client_new() return NULL when connecting to daemon fails When connecting to upowerd over D-Bus fails, we currently return a valid UpClient object (UP_IS_CLIENT is true) -- but trying to invoke any method on it will segfault or cause assertions. The client code has little chance to check for this as the returned object looks legit and we don't export the proxy object. Provide a more well-defined behaviour by returning NULL from up_client_new() when connecting to upowerd fails. Clients can check for this, and our methods stop segfaulting as they have checks like g_return_val_if_fail (UP_IS_CLIENT (client), ...); https://bugs.freedesktop.org/show_bug.cgi?id=95350 --- libupower-glib/up-client.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libupower-glib/up-client.c b/libupower-glib/up-client.c index 5b2218f..2ecffb3 100644 --- a/libupower-glib/up-client.c +++ b/libupower-glib/up-client.c @@ -497,6 +497,12 @@ up_client_new (void) g_object_ref (up_client_object); } else { up_client_object = g_object_new (UP_TYPE_CLIENT, NULL); + if (UP_CLIENT(up_client_object)->priv->proxy == NULL) { + /* up_client_init already warns about connection failure */ + g_object_unref(up_client_object); + up_client_object = NULL; + return NULL; + } g_object_add_weak_pointer (up_client_object, &up_client_object); } return UP_CLIENT (up_client_object); -- 2.7.4