From 81cd1bca1364c425fae709d8924145afe16b60cc Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Tue, 29 Jul 2025 10:57:45 +0800 Subject: [PATCH] fix getApplicationContext crash Signed-off-by: zhangzezhong --- .../ani/ani_common/src/ets_application_context_utils.cpp | 1 + frameworks/ets/ani/ani_common/src/ets_context_utils.cpp | 6 +++--- frameworks/ets/ani/application/src/ets_application.cpp | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp index 918e4811e90..07a7d9aa142 100644 --- a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp +++ b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp @@ -961,6 +961,7 @@ ani_object EtsApplicationContextUtils::CreateEtsApplicationContext(ani_env* aniE } auto etsReference = std::make_shared(); etsReference->aniObj = applicationContextObject; + etsReference->aniRef = applicationContextObjectRef; ApplicationContextManager::GetApplicationContextManager().SetEtsGlobalObject(etsReference); BindApplicationContextFunc(aniEnv); ani_class applicationContextClass = nullptr; diff --git a/frameworks/ets/ani/ani_common/src/ets_context_utils.cpp b/frameworks/ets/ani/ani_common/src/ets_context_utils.cpp index 53f6f3228d1..ec1d79b2701 100644 --- a/frameworks/ets/ani/ani_common/src/ets_context_utils.cpp +++ b/frameworks/ets/ani/ani_common/src/ets_context_utils.cpp @@ -646,9 +646,9 @@ ani_object GetApplicationContextSync(ani_env *env, ani_object aniObj) } if (!applicationContext->GetApplicationInfoUpdateFlag()) { auto appContextObj = ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(); - if (appContextObj != nullptr) { - TAG_LOGE(AAFwkTag::APPKIT, "appContextObj is not nullptr"); - return appContextObj->aniObj; + if (appContextObj != nullptr && appContextObj->aniRef != nullptr) { + TAG_LOGD(AAFwkTag::APPKIT, "appContextObj is not nullptr"); + return reinterpret_cast(appContextObj->aniRef); } } return GetApplicationContext(env, applicationContext); diff --git a/frameworks/ets/ani/application/src/ets_application.cpp b/frameworks/ets/ani/application/src/ets_application.cpp index 7c09dc6fa34..e395fac644c 100644 --- a/frameworks/ets/ani/application/src/ets_application.cpp +++ b/frameworks/ets/ani/application/src/ets_application.cpp @@ -253,14 +253,14 @@ ani_object EtsApplication::GetApplicationContext(ani_env *env) } auto etsReference = AbilityRuntime::ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(); - if (etsReference == nullptr || etsReference->aniObj == nullptr) { + if (etsReference == nullptr || etsReference->aniRef == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "null applicationContextObject"); AbilityRuntime::EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INNER); ani_ref result = nullptr; env->GetNull(&result); return static_cast(result); } - return etsReference->aniObj; + return reinterpret_cast(etsReference->aniRef); } void ApplicationInit(ani_env *env) -- Gitee