bluetooth: Reorganize code to avoid Coverity NULL dereference warning
authorPeter Meerwald-Stadler <pmeerw@pmeerw.net>
Tue, 16 Aug 2016 13:33:24 +0000 (15:33 +0200)
committerPeter Meerwald-Stadler <pmeerw@pmeerw.net>
Wed, 17 Aug 2016 15:32:03 +0000 (17:32 +0200)
CID 1353122

this is a false-positive because

   if (dbus_message_has_interface(p->message, "org.bluez.Manager") ||
        dbus_message_has_interface(p->message, "org.bluez.Adapter"))
        d = NULL;
    else if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(p->message)))) {
        pa_log_warn("Received GetProperties() reply from unknown device: %s (device removed?)",
dbus_message_get_path(p->message));
        goto finish2;
    }

d can be NULL only if p->message interface is org.bluez.Manager or
org.bluez.Adapter. If

    dbus_message_is_method_call(p->message, "org.bluez.Device", "GetProperties")

returns true, we know that the interface is org.bluez.Device.

thanks, Tanu!

src/modules/bluetooth/bluez4-util.c

index 3793898..542ce35 100644 (file)
@@ -657,13 +657,13 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) {
 
     pa_assert(p->call_data == d);
 
-    if (d != NULL)
+    if (d != NULL) {
         old_any_connected = pa_bluez4_device_any_audio_connected(d);
+        valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1;
 
-    valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1;
-
-    if (dbus_message_is_method_call(p->message, "org.bluez.Device", "GetProperties"))
-        d->device_info_valid = valid;
+        if (dbus_message_is_method_call(p->message, "org.bluez.Device", "GetProperties"))
+            d->device_info_valid = valid;
+    }
 
     if (dbus_message_is_error(r, DBUS_ERROR_SERVICE_UNKNOWN)) {
         pa_log_debug("Bluetooth daemon is apparently not available.");