[common] Coverity issues fix 39/174039/4
authorPiotr Kosko <p.kosko@samsung.com>
Tue, 27 Mar 2018 12:59:02 +0000 (14:59 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Wed, 28 Mar 2018 10:54:58 +0000 (12:54 +0200)
[Feature] Fixed coverity issues with below ids:
  110914, 110006, 108656, 107626, 107387,
  107077, 106006, 108993, 108297, 106912

  Additionally fixed potential crash in download API -
  in case of native function failure, the "success" response
  is not trying to be build.

[Verification] 100% passrate for modules:
  application, bluetooth, download, exif, filesystem, messaging-*

Change-Id: I8d9482501a7375962408186feaa5ecd1f0826b1d
Signed-off-by: Piotr Kosko <p.kosko@samsung.com>
12 files changed:
src/application/application_manager.cc
src/bluetooth/bluetooth_gatt_service.cc
src/bluetooth/bluetooth_health_channel.cc
src/bluetooth/bluetooth_socket.cc
src/common/filesystem/filesystem_storage.h
src/download/download_instance.cc
src/exif/exif_instance.cc
src/exif/jpeg_file.cc
src/messaging/email_manager.cc
src/messaging/message.cc
src/messaging/messaging_manager.cc
src/secureelement/secureelement_instance.cc

index 8744c0c..821f0fd 100644 (file)
@@ -1385,20 +1385,37 @@ void ApplicationManager::StartAppInfoEventListener(picojson::object* out) {
       return;
     }
 
+#define CHECK_APPLICATION_EVENT_ERROR(result, function_name)                                \
+  if (PKGMGR_R_OK > result) {                                                               \
+    StopAppInfoEventListener();                                                             \
+    LogAndReportError(                                                                      \
+        PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to register listener."), out,        \
+        ("Function %s failed: %s (%d)", function_name, get_error_message(result), result)); \
+    return;                                                                                 \
+  }
+
     g_application_list_changed_broker.AddApplicationInstance(&instance_);
 
-    pkgmgr_client_set_status_type(pkgmgr_client_handle_, PACKAGE_MANAGER_STATUS_TYPE_INSTALL |
-                                                             PACKAGE_MANAGER_STATUS_TYPE_UPGRADE);
-    pkgmgr_client_set_status_type(pkgmgr_client_uninstall_handle_,
-                                  PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL);
+    int result = pkgmgr_client_set_status_type(
+        pkgmgr_client_handle_,
+        PACKAGE_MANAGER_STATUS_TYPE_INSTALL | PACKAGE_MANAGER_STATUS_TYPE_UPGRADE);
+    CHECK_APPLICATION_EVENT_ERROR(result, "pkgmgr_client_set_status_type")
+
+    result = pkgmgr_client_set_status_type(pkgmgr_client_uninstall_handle_,
+                                           PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL);
+    CHECK_APPLICATION_EVENT_ERROR(result, "pkgmgr_client_set_status_type")
+
+    result = pkgmgr_client_listen_status(pkgmgr_client_handle_,
+                                         ApplicationListChangedBroker::ClientStatusListener,
+                                         &g_application_list_changed_broker);
+    CHECK_APPLICATION_EVENT_ERROR(result, "pkgmgr_client_listen_status")
 
-    pkgmgr_client_listen_status(pkgmgr_client_handle_,
-                                ApplicationListChangedBroker::ClientStatusListener,
-                                &g_application_list_changed_broker);
-    pkgmgr_client_listen_status(pkgmgr_client_uninstall_handle_,
-                                ApplicationListChangedBroker::AppUninstallListener,
-                                &g_application_list_changed_broker);
+    result = pkgmgr_client_listen_status(pkgmgr_client_uninstall_handle_,
+                                         ApplicationListChangedBroker::AppUninstallListener,
+                                         &g_application_list_changed_broker);
+    CHECK_APPLICATION_EVENT_ERROR(result, "pkgmgr_client_listen_status")
 
+#undef CHECK_APPLICATION_EVENT_ERROR
   } else {
     LoggerD("Broker callback is already registered.");
   }
index f6798a8..1200a7b 100644 (file)
@@ -424,7 +424,7 @@ void BluetoothGATTService::WriteValue(const picojson::value& args, picojson::obj
   int value_size = value_array.size();
   std::unique_ptr<char[]> value_data(new char[value_size]);
   for (int i = 0; i < value_size; ++i) {
-    value_data[i] = (int) value_array[i].get<double>();
+    value_data[i] = (int)value_array[i].get<double>();
   }
 
   struct Data {
index e119693..90d805d 100644 (file)
@@ -77,7 +77,7 @@ void BluetoothHealthChannel::SendData(const picojson::value& data, picojson::obj
   std::unique_ptr<char[]> data_ptr{new char[data_size]};
 
   for (std::size_t i = 0; i < data_size; ++i) {
-    data_ptr[i] = (int) binary_data[i].get<double>();
+    data_ptr[i] = (int)binary_data[i].get<double>();
   }
 
   int ntv_ret = bt_hdp_send_data(channel, data_ptr.get(), data_size);
index fea9ed1..a044a37 100644 (file)
@@ -63,7 +63,7 @@ void BluetoothSocket::WriteData(const picojson::value& data, picojson::object& o
   std::unique_ptr<char[]> data_ptr{new char[data_size]};
 
   for (std::size_t i = 0; i < data_size; ++i) {
-    data_ptr[i] = (int) binary_data[i].get<double>();
+    data_ptr[i] = (int)binary_data[i].get<double>();
   }
 
   if (kBluetoothError == bt_socket_send_data(socket, data_ptr.get(), data_size)) {
index 8ff7828..fd5dc17 100644 (file)
@@ -79,6 +79,7 @@ class Storage : public VirtualRoot {
   int id() const {
     return id_;
   }
+
  private:
   int id_;
 };
index fda4c57..4e1fa39 100644 (file)
@@ -314,12 +314,11 @@ gboolean DownloadInstance::OnFinished(void* user_data) {
       LoggerW("%s", get_error_message(ret));
     }
     out["status"] = picojson::value("completed");
+    out["fullPath"] =
+        picojson::value(common::FilesystemProvider::Create().GetVirtualPath(fullPath));
   }
-
   out["callbackId"] = picojson::value(static_cast<double>(callback_id));
 
-  out["fullPath"] = picojson::value(common::FilesystemProvider::Create().GetVirtualPath(fullPath));
-
   Instance::PostMessage(downCbPtr->instance, picojson::value(out).serialize().c_str());
   // downCbPtr is freed in destructor, it prevent from crash if OnFinished state
   // was called after OnCanceled or OnFailed
@@ -504,8 +503,17 @@ void DownloadInstance::DownloadManagerStart(const picojson::value& args, picojso
   system_info_get_platform_bool("http://tizen.org/feature/network.telephony", &cell_support);
   system_info_get_platform_bool("http://tizen.org/feature/network.wifi", &wifi_support);
 
+#define CHECK_CONNECTION_ERROR(ret)                                                           \
+  if (CONNECTION_ERROR_NONE != ret) {                                                         \
+    LogAndReportError(                                                                        \
+        common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Connection problem occured"), \
+        &out, ("Connection type is disconnected"));                                           \
+    return;                                                                                   \
+  }
+
   connection_h connection = nullptr;
-  connection_create(&connection);
+  ret = connection_create(&connection);
+  CHECK_CONNECTION_ERROR(ret)
   SCOPE_EXIT {
     connection_destroy(connection);
   };
@@ -513,11 +521,16 @@ void DownloadInstance::DownloadManagerStart(const picojson::value& args, picojso
   connection_cellular_state_e cell_state = CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE;
   connection_wifi_state_e wifi_state = CONNECTION_WIFI_STATE_DEACTIVATED;
 
-  connection_get_cellular_state(connection, &cell_state);
-  connection_get_wifi_state(connection, &wifi_state);
+  ret = connection_get_cellular_state(connection, &cell_state);
+  CHECK_CONNECTION_ERROR(ret)
+  ret = connection_get_wifi_state(connection, &wifi_state);
+  CHECK_CONNECTION_ERROR(ret)
 
   connection_type_e connection_type = CONNECTION_TYPE_DISCONNECTED;
-  connection_get_type(connection, &connection_type);
+  ret = connection_get_type(connection, &connection_type);
+  CHECK_CONNECTION_ERROR(ret)
+
+#undef CHECK_CONNECTION_ERROR
 
   if (CONNECTION_TYPE_DISCONNECTED == connection_type) {
     LogAndReportError(
index 121390c..0687d70 100644 (file)
@@ -184,6 +184,7 @@ void ExifInstance::ExifManagerGetThumbnail(const picojson::value& args, picojson
     gchar* ch_uri = g_base64_encode(exif_data->data, exif_data->size);
     exif_data_unref(exif_data);
     std::string base64 = "data:image/" + ext + ";base64," + ch_uri;
+    g_free(ch_uri);
 
     std::pair<std::string, picojson::value> pair;
     pair = std::make_pair("src", picojson::value(base64));
index e0640e1..aefd179 100644 (file)
@@ -584,9 +584,9 @@ PlatformResult JpegFile::saveToFilePriv(const std::string& out_path) {
     std::unique_ptr<unsigned char, CArrayDeleter> exif_output_data;
     unsigned int exif_output_size = 0;
 
-    if (cur_marker != JPEG_MARKER_SOI && cur_marker != JPEG_MARKER_EOI) {
+    if (JPEG_MARKER_SOI != cur_marker && JPEG_MARKER_EOI != cur_marker) {
       unsigned short section_size = 2;
-      if (JPEG_MARKER_APP1 && cur->exif_data) {
+      if (JPEG_MARKER_APP1 == cur_marker && cur->exif_data) {
         unsigned char* tmp = NULL;
         exif_data_save_data(cur->exif_data, &tmp, &exif_output_size);
         if (!tmp || 0 == exif_output_size) {
index 9a80c0d..256fbb3 100644 (file)
@@ -175,6 +175,24 @@ PlatformResult EmailManager::addMessagePlatform(int account_id, std::shared_ptr<
   ScopeLogger();
   email_mail_data_t* mail_data = NULL;
   email_mail_data_t* mail_data_final = NULL;
+  email_mailbox_t* mailbox_data = NULL;
+  email_account_t* account = NULL;
+
+  SCOPE_EXIT {
+    if (mail_data_final) {
+      email_free_mail_data(&mail_data_final, 1);
+    }
+    if (mail_data) {
+      email_free_mail_data(&mail_data, 1);
+    }
+    if (mailbox_data) {
+      email_free_mailbox(&mailbox_data, 1);
+    }
+    if (account) {
+      email_free_account(&account, 1);
+    }
+  };
+
   int err = EMAIL_ERROR_NONE;
 
   PlatformResult ret = Message::convertPlatformEmail(message, &mail_data);
@@ -183,13 +201,8 @@ PlatformResult EmailManager::addMessagePlatform(int account_id, std::shared_ptr<
   mail_data->account_id = account_id;
 
   // Adding "from" email address
-  email_account_t* account = NULL;
   err = email_get_account(account_id, GET_FULL_DATA_WITHOUT_PASSWORD, &account);
   if (EMAIL_ERROR_NONE != err) {
-    int ntv_ret = email_free_mail_data(&mail_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to free mail data memory %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
     return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Cannot retrieve email account information",
                               ("email_get_account error: %d (%s)", err, get_error_message(err)));
   }
@@ -200,18 +213,10 @@ PlatformResult EmailManager::addMessagePlatform(int account_id, std::shared_ptr<
   ss >> address_from;
   mail_data->full_address_from = strdup(address_from.c_str());
   LoggerE("FROM %s", mail_data->full_address_from);
-  err = email_free_account(&account, 1);
-  if (EMAIL_ERROR_NONE != err) {
-    LoggerE("Failed to free account data memory");
-  }
+
   // Setting mailbox id
-  email_mailbox_t* mailbox_data = NULL;
   err = email_get_mailbox_by_mailbox_type(account_id, mailbox_type, &mailbox_data);
   if (EMAIL_ERROR_NONE != err) {
-    int ntv_ret = email_free_mail_data(&mail_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to free mail data memory: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
     return LogAndCreateResult(
         ErrorCode::UNKNOWN_ERR, "Cannot retrieve draft mailbox",
         ("email_get_mailbox_by_mailbox_type error: %d (%s)", err, get_error_message(err)));
@@ -228,14 +233,6 @@ PlatformResult EmailManager::addMessagePlatform(int account_id, std::shared_ptr<
   // adding email without attachments
   err = email_add_mail(mail_data, NULL, 0, NULL, 0);
   if (EMAIL_ERROR_NONE != err) {
-    int ntv_ret = email_free_mail_data(&mail_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to free mail data memory: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
-    ntv_ret = email_free_mailbox(&mailbox_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to destroy mailbox: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
     return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Couldn't add message to draft mailbox",
                               ("email_add_mail error: %d (%s)", err, get_error_message(err)));
   } else {
@@ -250,46 +247,20 @@ PlatformResult EmailManager::addMessagePlatform(int account_id, std::shared_ptr<
   if (message->getHasAttachment()) {
     ret = Message::addEmailAttachments(message);
     if (ret.IsError()) {
-      int ntv_ret = email_free_mail_data(&mail_data, 1);
-      if (EMAIL_ERROR_NONE != ntv_ret) {
-        LoggerE("Failed to free mail data memory: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-      }
       return ret;
     }
   }
 
   err = email_get_mail_data(message->getId(), &mail_data_final);
   if (EMAIL_ERROR_NONE != err) {
-    int ntv_ret = email_free_mail_data(&mail_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to free mail data memory: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
     return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Couldn't retrieve added mail data",
                               ("email_get_mail_data error: %d (%s)", err, get_error_message(err)));
   }
   ret = message->updateEmailMessage(*mail_data_final);
   if (ret.IsError()) {
-    int ntv_ret = email_free_mail_data(&mail_data, 1);
-    if (EMAIL_ERROR_NONE != ntv_ret) {
-      LoggerE("Failed to free mail data memory: %d (%s)", ntv_ret, get_error_message(ntv_ret));
-    }
     return ret;
   }
 
-  err = email_free_mail_data(&mail_data_final, 1);
-  if (EMAIL_ERROR_NONE != err) {
-    LoggerE("Failed to free mail data final memory: %d (%s)", err, get_error_message(err));
-  }
-
-  err = email_free_mail_data(&mail_data, 1);
-  if (EMAIL_ERROR_NONE != err) {
-    LoggerE("Failed to free mail data memory: %d (%s)", err, get_error_message(err));
-  }
-
-  err = email_free_mailbox(&mailbox_data, 1);
-  if (EMAIL_ERROR_NONE != err) {
-    LoggerE("Failed to destroy mailbox: %d (%s)", err, get_error_message(err));
-  }
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
index d439357..ba6aaa6 100644 (file)
@@ -338,15 +338,19 @@ std::string Message::convertEmailRecipients(const std::vector<std::string>& reci
 
 PlatformResult saveToTempFile(const std::string& data, std::string* file_name) {
   ScopeLogger();
-  char buf[] = "XXXXXX";
+  char buf[] = "/tmp/XXXXXX";
 
   mode_t mask = umask(S_IWGRP | S_IWOTH);
-  mkstemp(buf);  // Just generate unique name
+  int file_descriptor = mkstemp(buf);
+  // Generate unique name and open the file descriptor
+  if (-1 == file_descriptor) {
+    return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Temp file creation failed");
+  }
 
-  std::string tmp_name = std::string("/tmp/") + buf;
+  std::string tmp_name = buf;
 
   mode_t old_mask = umask(mask);
-  FILE* file = fopen(tmp_name.c_str(), "w");
+  FILE* file = fdopen(file_descriptor, "w+");
   umask(old_mask);
 
   if (NULL == file) {
index dbb4f4c..566f198 100644 (file)
@@ -55,7 +55,8 @@ MsgManagerCallbackData::MsgManagerCallbackData(MessagingInstance& instance)
   ScopeLogger();
 }
 
-MessagingManager::MessagingManager(MessagingInstance& instance) : instance_(instance) {
+MessagingManager::MessagingManager(MessagingInstance& instance)
+    : m_msg_handle(nullptr), instance_(instance) {
   ScopeLogger();
   int ret = msg_open_msg_handle(&m_msg_handle);
   if (ret != MSG_SUCCESS) {
index 7313d70..eccb692 100644 (file)
@@ -554,7 +554,7 @@ TizenResult SecureElementInstance::Transmit(picojson::object const& args,
     };
 
     for (size_t i = 0; i < v_cmd_size; i++) {
-      cmd[i] = (int) v_cmd[i].get<double>();
+      cmd[i] = (int)v_cmd[i].get<double>();
     }
 
     int length = 0;