From 9293cd3fdfe77bbe22edec2de29a04127eb1a17b Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Fri, 12 Sep 2025 11:02:03 +0800 Subject: [PATCH] fix NotifyDebugAssertResult stringSessionId Signed-off-by: zhangzezhong --- .../src/ets_ability_manager.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/frameworks/ets/ani/ability_manager/src/ets_ability_manager.cpp b/frameworks/ets/ani/ability_manager/src/ets_ability_manager.cpp index 7bc8aa86e21..5e52953eeaa 100644 --- a/frameworks/ets/ani/ability_manager/src/ets_ability_manager.cpp +++ b/frameworks/ets/ani/ability_manager/src/ets_ability_manager.cpp @@ -15,6 +15,8 @@ #include "ets_ability_manager.h" +#include + #include "ability_business_error.h" #include "ability_context.h" #include "ability_manager_client.h" @@ -46,6 +48,7 @@ constexpr const char* ETS_ABILITY_MANAGER_SIGNATURE_ARRAY = ":Lescompat/Array;"; constexpr const char* ETS_ABILITY_MANAGER_SIGNATURE_CALLBACK = "Lutils/AbilityUtils/AsyncCallbackWrapper;:V"; constexpr const char *ON_OFF_TYPE_ABILITY_FOREGROUND_STATE = "abilityForegroundState"; constexpr int32_t ERR_FAILURE = -1; +const std::string MAX_UINT64_VALUE = "18446744073709551615"; sptr CreateShareDataCallbackStub( ani_env *env, ani_ref callbackRef) @@ -464,6 +467,22 @@ void EtsAbilityManager::NativeOff(ani_env *env, ani_string aniType, ani_object a TAG_LOGD(AAFwkTag::ABILITYMGR, "nativeOff end"); } +bool CheckIsNumString(const std::string &numStr) +{ + const std::regex regexJsperf(R"(^\d*)"); + std::match_results matchResults; + if (numStr.empty() || !std::regex_match(numStr, matchResults, regexJsperf)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "parse failed: %{public}s", numStr.c_str()); + return false; + } + if (MAX_UINT64_VALUE.length() < numStr.length() || + (MAX_UINT64_VALUE.length() == numStr.length() && MAX_UINT64_VALUE.compare(numStr) < 0)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "parse failed: %{public}s", numStr.c_str()); + return false; + } + return true; +} + void EtsAbilityManager::NativeNotifyDebugAssertResultCheck(ani_env *env, ani_string aniSessionId, ani_object userStatusObj) { @@ -473,7 +492,7 @@ void EtsAbilityManager::NativeNotifyDebugAssertResultCheck(ani_env *env, ani_str return; } std::string sessionId; - if (!AppExecFwk::GetStdString(env, aniSessionId, sessionId)) { + if (!AppExecFwk::GetStdString(env, aniSessionId, sessionId) || !CheckIsNumString(sessionId)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "convert sessionId failed"); EtsErrorUtil::ThrowInvalidParamError(env, "Parse param sessionId failed, must be a string."); return; -- Gitee