Fix static analysis issue 94/321394/2
authorJihoi Kim <jihoi.kim@samsung.com>
Thu, 20 Mar 2025 08:08:01 +0000 (17:08 +0900)
committerJihoi Kim <jihoi.kim@samsung.com>
Fri, 21 Mar 2025 02:02:22 +0000 (11:02 +0900)
- Resolve Null dereference issue
- Resolve Double free issue
- Resolve Memory leak issue

Change-Id: I8ab97562eac6180fef37ec5b0c369a464f85ebda
Signed-off-by: Jihoi Kim <jihoi.kim@samsung.com>
src/common/shared_memory/shm_config.cc
src/server/appinfo_internal.cc
src/server/shared_memory/shm_manager.cc

index 812742d988a89f5d933c9a1d68db3de78330636d..4b6d9bc502fd2694ebc002a7ccf7e538101e6bdd 100644 (file)
@@ -28,9 +28,6 @@
 
 #include "pkgmgrinfo_storage_status.h"
 
-
-
-
 #include <fstream>
 
 #undef LOG_TAG
@@ -156,8 +153,8 @@ ShmMapper::ShmMapper(const char* shm_name)
     : shm_name_(shm_name), mem_size_(0), mem_ptr_(nullptr) {}
 
 ShmMapper::~ShmMapper() {
-  if (mem_ptr_)
-    munmap(mem_ptr_, mem_size_);
+  if (mem_ptr_ && munmap(mem_ptr_, mem_size_) != 0)
+    LOGE("Failed to munmap %s", shm_name_);
 }
 
 uint8_t* ShmMapper::GetPtr() const {
@@ -174,8 +171,7 @@ ShmWriteMapper::ShmWriteMapper(const char* shm_name) :
 ShmWriteMapper::~ShmWriteMapper() {
   if (fd_ != -1)
     close(fd_);
-  if (munmap(mem_ptr_, mem_size_) != 0)
-    LOGE("Failed to munmap %s", shm_name_);
+  fd_ = -1;
 }
 
 bool ShmWriteMapper::Init(size_t mem_size) {
@@ -255,8 +251,7 @@ ShmReadMapper::ShmReadMapper(const char* shm_name) :
 ShmReadMapper::~ShmReadMapper() {
   if (fd_ != -1)
     close(fd_);
-  if (mem_ptr_ && munmap(mem_ptr_, mem_size_) != 0)
-    LOGE("Failed to munmap %s", shm_name_);
+  fd_ = -1;
 }
 
 bool ShmReadMapper::Init() {
@@ -316,6 +311,7 @@ uint8_t* ShmReadMapper::CopyPartial(size_t offset, size_t size) {
   } else { // case out-mmap, read file
     if (lseek(fd_, offset, SEEK_SET) == -1) {
       LOGE("lseek fail fd(%d), index(%zd)", fd_, offset);
+      free(ptr);
       close(fd_);
       fd_ = -1;
       return nullptr;
index b9ebb84b7fe430d196c087969df00242a2401c0d..f52e62a861ae05ef58da6c33d00efd6cda45c6f8 100644 (file)
@@ -67,12 +67,12 @@ int GetSplashScreens(const tizen_base::Database& db,
   auto& list_writer = writer.GetSplashscreensListWriter();
   for (const auto& rec : r) {
     list_writer.AddItem()
-        .WriteSrc(GetCString(0, rec))
-        .WriteType(GetCString(1, rec))
-        .WriteOrientation(GetCString(2, rec))
-        .WriteIndicatordisplay(GetCString(3, rec))
-        .WriteOperation(GetCString(4, rec))
-        .WriteColorDepth(GetCString(5, rec));
+        .WriteSrc(GetCString2(0, rec))
+        .WriteType(GetCString2(1, rec))
+        .WriteOrientation(GetCString2(2, rec))
+        .WriteIndicatordisplay(GetCString2(3, rec))
+        .WriteOperation(GetCString2(4, rec))
+        .WriteColorDepth(GetCString2(5, rec));
   }
 
   return PMINFO_R_OK;
@@ -220,10 +220,10 @@ int GetResControl(const tizen_base::Database& db, const char* appid,
   auto& list_writer = writer.GetResControlListWriter();
   for (const auto& rec : r) {
     list_writer.AddItem()
-        .WriteResType(GetCString(0, rec))
-        .WriteMinResVersion(GetCString(1, rec))
-        .WriteMaxResVersion(GetCString(2, rec))
-        .WriteAutoClose(GetCString(3, rec));
+        .WriteResType(GetCString2(0, rec))
+        .WriteMinResVersion(GetCString2(1, rec))
+        .WriteMaxResVersion(GetCString2(2, rec))
+        .WriteAutoClose(GetCString2(3, rec));
   }
 
   return PMINFO_R_OK;
index 550511f135562d98e115c451acc44e434845374f..62014c3fbbda91c14768e565f335271ae51f9055 100644 (file)
@@ -199,10 +199,13 @@ void ShmManager::RegisterPendingPackageInfo(
     const tizen_base::Database& db, package_x* info,
     pid_t pid, uid_t uid, const std::string& locale,
     pkgmgr_common::PkgWriteType write_type) {
-  LOGD("register pending package info : %s", info->package);
-  if (!info || !info->package)
+  if (!info || !info->package) {
+    LOGW("register pending package info(%p), info->package(%p)",
+        info, info == nullptr ? nullptr : info->package);
     return;
+  }
 
+  LOGD("register pending package info : %s", info->package);
   InsertWriterPID(pid);
   pending_pkg_[info->package] = pid;
 }