[Bluetooth] Fix Coverity issue 10/258510/3
authorPawel Wasowski <p.wasowski2@samsung.com>
Wed, 19 May 2021 09:56:25 +0000 (11:56 +0200)
committerPawel Wasowski <p.wasowski2@samsung.com>
Wed, 19 May 2021 13:06:56 +0000 (15:06 +0200)
Coverity issue numbers:
1227417
1227505
1229055

[Verification] Code compiles

Change-Id: Ie05e4184cf200b69615b2e4ba92d3d5cb291d4d0
Signed-off-by: Pawel Wasowski <p.wasowski2@samsung.com>
src/bluetooth/bluetooth_adapter.cc

index 17ad6c9..82c1118 100644 (file)
@@ -73,7 +73,7 @@ const std::string kAdapterDiscoverErrorEvent = "BluetoothDiscoverDevicesErrorCal
 // device
 const std::string kDeviceAddress = "address";
 const unsigned short kTimeout = 180;
-}
+}  // namespace
 
 static bool IsValidAddress(const std::string& address) {
   ScopeLogger();
@@ -859,8 +859,14 @@ void BluetoothAdapter::DiscoverDevices(const picojson::value& /* data */, picojs
   }
 
   if (result.IsSuccess()) {
+    auto ret = bt_adapter_start_device_discovery();
+    if (BT_ERROR_NONE != ret) {
+      result = LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "An unknown error occurred");
+    }
+  }
+
+  if (result.IsSuccess()) {
     this->user_request_list_[DISCOVER_DEVICES] = true;
-    bt_adapter_start_device_discovery();
   } else {
     std::shared_ptr<picojson::value> response =
         std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
@@ -1169,28 +1175,38 @@ void BluetoothAdapter::CreateBonding(const picojson::value& data, picojson::obje
       };
 
       BondingHandler* handler = new BondingHandler(instance_, callback_handle, address);
-      bt_device_set_bond_created_cb(bond_create_callback, handler);
-      int ret = bt_device_create_bond(address.c_str());
+      int ret = bt_device_set_bond_created_cb(bond_create_callback, handler);
+      if (BT_ERROR_NONE != ret) {
+        delete handler;
+        // We ignore other error types that can be in ret, because they are highly improbable
+        result = LogAndCreateResult(
+            ErrorCode::UNKNOWN_ERR, "Unknown error",
+            ("bt_device_set_bond_created_cb error: %d (%s)", ret, get_error_message(ret)));
+      } else {
+        LoggerD("bt_device_set_bond_created_cb() succeeded");
 
-      switch (ret) {
-        case BT_ERROR_NONE: {
-          LoggerD("bt_device_create_bond() succeeded");
-          break;
-        }
-        case BT_ERROR_INVALID_PARAMETER: {
-          bt_device_unset_bond_created_cb();
-          delete handler;
-          result = LogAndCreateResult(
-              ErrorCode::INVALID_VALUES_ERR, "Invalid value",
-              ("bt_device_create_bond error: %d (%s)", ret, get_error_message(ret)));
-          break;
-        }
-        default: {
-          bt_device_unset_bond_created_cb();
-          delete handler;
-          result = LogAndCreateResult(
-              ErrorCode::UNKNOWN_ERR, "Unknown exception",
-              ("bt_device_create_bond error: %d (%s)", ret, get_error_message(ret)));
+        ret = bt_device_create_bond(address.c_str());
+
+        switch (ret) {
+          case BT_ERROR_NONE: {
+            LoggerD("bt_device_create_bond() succeeded");
+            break;
+          }
+          case BT_ERROR_INVALID_PARAMETER: {
+            bt_device_unset_bond_created_cb();
+            delete handler;
+            result = LogAndCreateResult(
+                ErrorCode::INVALID_VALUES_ERR, "Invalid value",
+                ("bt_device_create_bond error: %d (%s)", ret, get_error_message(ret)));
+            break;
+          }
+          default: {
+            bt_device_unset_bond_created_cb();
+            delete handler;
+            result = LogAndCreateResult(
+                ErrorCode::UNKNOWN_ERR, "Unknown error",
+                ("bt_device_create_bond error: %d (%s)", ret, get_error_message(ret)));
+          }
         }
       }
     } else if (result.IsSuccess()) {
@@ -1607,10 +1623,11 @@ void BluetoothAdapter::OnSocketConnected(int result, bt_socket_connection_state_
                           &response->get<picojson::object>());
       }
 
+      const auto request_callback_handle = request->second->callback_handle_;
       // request will be handled, can be safely removed
       object->connection_requests_.erase(request);
 
-      object->instance_.SyncResponse(request->second->callback_handle_, response);
+      object->instance_.SyncResponse(request_callback_handle, response);
     } else {  // disconnected when Client
       if (result == BT_ERROR_NONE) {
         object->RemoveSocket(connection->socket_fd);