From: Martin Xu <martin...@intel.com>

Function dbus_message_get_args just checks the signature which may
happens to be s(string), then it will just return TRUE, and the error
message is treated as return value.
So dbus_set_error_from_message is used to check the error, before
call dbus_message_get_args.
---
 plugins/bluetooth.c |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 1c0fa96..4c5fd6d 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -89,6 +89,13 @@ static void connect_reply(DBusPendingCall *call, void 
*user_data)
 
        dbus_error_init(&error);
 
+       if (dbus_set_error_from_message(&error, reply) == TRUE) {
+               connman_error("%s", error.message);
+               dbus_error_free(&error);
+
+               goto done;
+       }
+
        if (dbus_message_get_args(reply, &error,
                                        DBUS_TYPE_STRING, &interface,
                                                DBUS_TYPE_INVALID) == FALSE) {
@@ -171,6 +178,13 @@ static void disconnect_reply(DBusPendingCall *call, void 
*user_data)
 
        dbus_error_init(&error);
 
+       if (dbus_set_error_from_message(&error, reply) == TRUE) {
+               connman_error("%s", error.message);
+               dbus_error_free(&error);
+
+               goto done;
+       }
+
        if (dbus_message_get_args(reply, &error, DBUS_TYPE_INVALID) == FALSE) {
                if (dbus_error_is_set(&error) == TRUE) {
                        connman_error("%s", error.message);
@@ -625,6 +639,13 @@ static void list_adapters_reply(DBusPendingCall *call, 
void *user_data)
 
        dbus_error_init(&error);
 
+       if (dbus_set_error_from_message(&error, reply) == TRUE) {
+               connman_error("%s", error.message);
+               dbus_error_free(&error);
+
+               goto done;
+       }
+
        if (dbus_message_get_args(reply, &error,
                                DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH,
                                                &adapters, &num_adapters,
@@ -717,14 +738,26 @@ static void bluetooth_remove(struct connman_device 
*device)
 
 static void powered_reply(DBusPendingCall *call, void *user_data)
 {
+       DBusError error;
        DBusMessage *reply;
 
        DBG("");
 
        reply = dbus_pending_call_steal_reply(call);
 
-       dbus_message_unref(reply);
+       dbus_error_init(&error);
+
+       if (dbus_set_error_from_message(&error, reply) == TRUE) {
+               connman_error("%s", error.message);
+               dbus_error_free(&error);
 
+               dbus_message_unref(reply);
+               dbus_pending_call_unref(call);
+
+               return;
+       }
+
+       dbus_message_unref(reply);
        dbus_pending_call_unref(call);
 
        add_adapter(connection, user_data);
-- 
1.6.1.3

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to