Check map data in cache has key before access 14/274914/1
authorIlho Kim <ilho159.kim@samsung.com>
Thu, 12 May 2022 03:35:01 +0000 (12:35 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Thu, 12 May 2022 03:35:01 +0000 (12:35 +0900)
map's operator[] can modify it's data
it can cause problem in multithreaded environments

Change-Id: I2aa75be1ae70a675e6875039a25af0243a1eeb90
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/server/database/db_handle_provider.cc

index bd3d6e0..1e88c35 100644 (file)
@@ -416,7 +416,11 @@ std::vector<std::shared_ptr<package_x>> DBHandleProvider::GetPackages(
     pid_t pid, bool write, pkgmgrinfo_filter_x* filter,
     const std::string& package) {
   std::vector<std::shared_ptr<package_x>> ret;
-  for (auto& info : pkg_map_[package]) {
+  auto map_it = pkg_map_.find(package);
+  if (map_it == pkg_map_.end())
+    return ret;
+
+  for (auto& info : map_it->second) {
     bool pass = true;
     for (auto* it = filter->list; it != nullptr; it = g_slist_next(it)) {
       auto node = reinterpret_cast<pkgmgrinfo_node_x*>(it->data);
@@ -454,7 +458,11 @@ std::vector<std::shared_ptr<application_x>> DBHandleProvider::GetApplications(
   }
 
   std::vector<std::shared_ptr<application_x>> ret;
-  for (auto& info : app_map_[app]) {
+  auto map_it = app_map_.find(app);
+  if (map_it == app_map_.end())
+    return ret;
+
+  for (auto& info : map_it->second) {
     bool pass = true;
     for (auto* it = filter->list; it != nullptr; it = g_slist_next(it)) {
       auto node = reinterpret_cast<pkgmgrinfo_node_x*>(it->data);