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) {
