From: Ilho Kim Date: Thu, 12 May 2022 03:35:01 +0000 (+0900) Subject: Check map data in cache has key before access X-Git-Tag: submit/tizen/20220512.042033~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ddee800ea569b7b5593d2000ad4de4152b04e04c;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git Check map data in cache has key before access map's operator[] can modify it's data it can cause problem in multithreaded environments Change-Id: I2aa75be1ae70a675e6875039a25af0243a1eeb90 Signed-off-by: Ilho Kim --- diff --git a/src/server/database/db_handle_provider.cc b/src/server/database/db_handle_provider.cc index bd3d6e01..1e88c35d 100644 --- a/src/server/database/db_handle_provider.cc +++ b/src/server/database/db_handle_provider.cc @@ -416,7 +416,11 @@ std::vector> DBHandleProvider::GetPackages( pid_t pid, bool write, pkgmgrinfo_filter_x* filter, const std::string& package) { std::vector> 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(it->data); @@ -454,7 +458,11 @@ std::vector> DBHandleProvider::GetApplications( } std::vector> 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(it->data);