This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch hotfix/coverity_fix
in repository https://gitbox.apache.org/repos/asf/celix.git

commit 85bf1c06873f855aadc4ef2aef9d2f88e28225ba
Author: PengZheng <[email protected]>
AuthorDate: Mon Apr 10 18:17:11 2023 +0800

    Fix Coverity 218469 Dereference before null check.
---
 .../include/celix/dm/DependencyManager_Impl.h      | 10 ++++--
 libs/framework/src/dm_dependency_manager_impl.c    | 41 +++++++++++-----------
 2 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/libs/framework/include/celix/dm/DependencyManager_Impl.h 
b/libs/framework/include/celix/dm/DependencyManager_Impl.h
index f3e9f075..e7c71982 100644
--- a/libs/framework/include/celix/dm/DependencyManager_Impl.h
+++ b/libs/framework/include/celix/dm/DependencyManager_Impl.h
@@ -201,9 +201,13 @@ static celix::dm::DependencyManagerInfo 
createDepManInfoFromC(celix_dependency_m
 
 inline celix::dm::DependencyManagerInfo DependencyManager::getInfo() const {
     auto* cInfo = celix_dependencyManager_createInfo(cDependencyManager(), 
celix_bundleContext_getBundleId(context.get()));
-    auto result = createDepManInfoFromC(cInfo);
-    celix_dependencyManager_destroyInfo(cDependencyManager(), cInfo);
-    return result;
+    if (cInfo) {
+        auto result = createDepManInfoFromC(cInfo);
+        celix_dependencyManager_destroyInfo(cDependencyManager(), cInfo);
+        return result;
+    } else {
+        return {};
+    }
 }
 
 
diff --git a/libs/framework/src/dm_dependency_manager_impl.c 
b/libs/framework/src/dm_dependency_manager_impl.c
index 87541b1e..d94214e8 100644
--- a/libs/framework/src/dm_dependency_manager_impl.c
+++ b/libs/framework/src/dm_dependency_manager_impl.c
@@ -180,31 +180,30 @@ celix_status_t 
celix_dependencyManager_removeAllComponentsAsync(celix_dependency
 
 
 static void celix_dm_getInfoCallback(void *handle, const celix_bundle_t *bnd) {
-       celix_dependency_manager_info_t **out = handle;
+    celix_dependency_manager_info_t **out = handle;
 
-       celix_bundle_context_t *context = NULL;
-       bundle_getContext((celix_bundle_t*)bnd, &context);
-       celix_dependency_manager_t *mng = 
celix_bundleContext_getDependencyManager(context);
+    celix_bundle_context_t *context = NULL;
+    bundle_getContext((celix_bundle_t*)bnd, &context);
+    celix_dependency_manager_t *mng = 
celix_bundleContext_getDependencyManager(context);
 
-       celix_dependency_manager_info_t *info = calloc(1, sizeof(*info));
-    info->bndId = celix_bundle_getId(bnd);
-    info->bndSymbolicName = 
celix_utils_strdup(celix_bundle_getSymbolicName(bnd));
-       celixThreadMutex_lock(&mng->mutex);
-       if (info != NULL) {
+    celix_dependency_manager_info_t *info = calloc(1, sizeof(*info));
+    if (info != NULL) {
+        info->bndId = celix_bundle_getId(bnd);
+        info->bndSymbolicName = 
celix_utils_strdup(celix_bundle_getSymbolicName(bnd));
+        celixThreadMutex_lock(&mng->mutex);
         celix_array_list_create_options_t opts = 
CELIX_EMPTY_ARRAY_LIST_CREATE_OPTIONS;
         opts.simpleRemovedCallback = (void*)component_destroyComponentInfo;
-               info->components = celix_arrayList_createWithOptions(&opts);
-               int size = celix_arrayList_size(mng->components);
-               for (int i = 0; i < size; i += 1) {
-                       celix_dm_component_t *cmp = 
celix_arrayList_get(mng->components, i);
-                       celix_dm_component_info_t *cmpInfo = NULL;
-                       component_getComponentInfo(cmp, &cmpInfo);
-                       celix_arrayList_add(info->components, cmpInfo);
-               }
-       }
-       celixThreadMutex_unlock(&mng->mutex);
-
-       *out = info;
+        info->components = celix_arrayList_createWithOptions(&opts);
+        int size = celix_arrayList_size(mng->components);
+        for (int i = 0; i < size; i += 1) {
+            celix_dm_component_t *cmp = celix_arrayList_get(mng->components, 
i);
+            celix_dm_component_info_t *cmpInfo = NULL;
+            component_getComponentInfo(cmp, &cmpInfo);
+            celix_arrayList_add(info->components, cmpInfo);
+        }
+        celixThreadMutex_unlock(&mng->mutex);
+    }
+    *out = info;
 }
 
 celix_dependency_manager_info_t* 
celix_dependencyManager_createInfo(celix_dependency_manager_t *manager, long 
bndId) {

Reply via email to