mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 22:21:36 -04:00
!19542 merge refactor/internal-error-3 into master
refactor: 16000050 error messages for abilityManager Created-by: yangxuguang-huawei Commit-by: yangxuguang-huawei Merged-by: openharmony_ci Description: **IssueNo**: https://gitcode.com/openharmony/ability_ability_runtime/issues/15417 **Description**: **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | ok | | 成员变量进行赋值或创建需要排查并发 | ok| | 谨慎在lambda表达式中使用引用捕获 | ok| | 谨慎在未经拷贝的情况下使用外部传入的string、C字符串 | ok| | map\vector\list\set等stl模板类使用时需要排查并发 | ok| | 谨慎考虑加锁范围 | ok| | 在IPC通信中谨慎使用同步通信方式 | ok| | 禁止传递this指针至其他模块或线程(特别是eventhandler任务) | ok| | 禁止将外部传入的裸指针在内部直接构造智能指针 | ok| | 禁止多个独立创建的智能指针管理同一地址 | ok| | 禁止在析构函数中抛异步任务 | ok| | 禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁 | ok| | 禁止在对外接口中未经判空直接使用外部传入的指针 | ok| | 禁止接口返回局部变量引用 | ok| | 禁止在信号函数中加锁 | ok| | 禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作 | ok| | 禁止将同一个cpp编译在不同的so中 | ok| **安全编码自检:** | 自检项 | 自检结果 | | -------------------------------------------------------------- | -------- | | 裸指针避免通过隐式转换构造为sptr | ok | | json对象在取值之前必须先判断类型,避免类型不匹配 | ok| | 序列化时必须对传入的数组大小进行校验,避免出现超大数组 | ok | | 避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型 | ok| | 外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验 | ok | | 指针变量、表示资源描述符的变量、bool变量必须赋初值 | ok| | readParcelable获取的对象使用前需要判空 | ok| | 分配和释放内存的函数需要成对出现 | ok| | 申请内存后异常退出前需要及时进行内存释放 | ok | | 内存申请前必须对内存大小进行合法性校验 | ok| | 内存分配后必须判断是否成功 | ok| | 禁止使用realloc、alloca函数 | ok| | 禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰 | ok| | 禁止打印内存地址 | ok| | 整数之间运算时必须严格检查,确保不会出现溢出、反转、除0 | ok| | 禁止对有符号整数进行位操作符运算 | ok| | 禁止对指针进行逻辑或位运算 | ok| | 循环次数如果收外部数据控制,需要检验其合法性 | ok| | 禁止使用内存操作类危险函数,需要使用安全函数 | ok| | 谨慎使用不可重入函数 | ok| | 必须检查安全函数的返回值,并进行正确处理 | ok| | 禁止仅通过TokenType类型判断绕过权限校验 | ok| **TDD Result**: 已验证OK **XTS Result**: 已验证OK ### 是否已执行L0用例 - [x] 已验证 - [ ] 不涉及。如不涉及,请写明理由 See merge request: openharmony/ability_ability_runtime!19542
This commit is contained in:
@@ -97,7 +97,8 @@ void EtsQueryERMSObserver::CallCallback(ani_object callback, const AtomicService
|
||||
if (resultCode == ERR_OK) {
|
||||
aniObject = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_OK);
|
||||
} else {
|
||||
aniObject = EtsErrorUtil::CreateErrorByNativeErr(env, resultCode);
|
||||
aniObject = EtsErrorUtil::CreateErrorByNativeErr(env, resultCode, "",
|
||||
GetInnerErrorMsg(AbilityInnerErrorMsg::QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED));
|
||||
}
|
||||
AppExecFwk::AsyncCallback(env, callback, aniObject, nullptr);
|
||||
AppExecFwk::DetachAniEnv(etsVm_, isAttachThread);
|
||||
|
||||
@@ -877,7 +877,8 @@ private:
|
||||
auto ret = AbilityManagerClient::GetInstance()->RestartSelfAtomicService(token);
|
||||
if (ret != ERR_OK) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "resatrt atomic service failed: %{public}d", ret);
|
||||
ThrowErrorByNativeErr(env, ret);
|
||||
napi_throw(env, CreateJsErrorByNativeErr(env, ret, "",
|
||||
GetInnerErrorMsg(AbilityInnerErrorMsg::RESTART_SELF_ATOMIC_SERVICE_FAILED)));
|
||||
}
|
||||
return CreateJsUndefined(env);
|
||||
}
|
||||
|
||||
@@ -230,6 +230,10 @@ constexpr const char* ERROR_MSG_RESTORE_WINDOW_STAGE_FAILED =
|
||||
"Internal error. Failed to restore the window stage. Check the local storage object and try again.";
|
||||
constexpr const char* ERROR_MSG_WRAP_ABILITY_RESULT_FAILED =
|
||||
"Internal error. Failed to create the ability result. Check the returned Want and try again.";
|
||||
constexpr const char* ERROR_MSG_QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED =
|
||||
"Internal error. Failed to query the atomic service startup rule. Try again later.";
|
||||
constexpr const char* ERROR_MSG_RESTART_SELF_ATOMIC_SERVICE_FAILED =
|
||||
"Internal error. Failed to restart the current atomic service. Try again later.";
|
||||
constexpr const char* ERROR_MSG_SERVICE_UNAVAILABLE =
|
||||
"Internal error. Service unavailable. Try again later.";
|
||||
constexpr const char* ERROR_MSG_OPERATION_FAILED =
|
||||
@@ -547,9 +551,11 @@ static std::unordered_map<AbilityInnerErrorMsg, const char*> INNER_ERROR_MSG_BY_
|
||||
{AbilityInnerErrorMsg::OPERATION_FAILED, ERROR_MSG_OPERATION_FAILED},
|
||||
{AbilityInnerErrorMsg::RESTORE_WINDOW_STAGE_FAILED, ERROR_MSG_RESTORE_WINDOW_STAGE_FAILED},
|
||||
{AbilityInnerErrorMsg::WRAP_ABILITY_RESULT_FAILED, ERROR_MSG_WRAP_ABILITY_RESULT_FAILED},
|
||||
{AbilityInnerErrorMsg::QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED,
|
||||
ERROR_MSG_QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED},
|
||||
{AbilityInnerErrorMsg::RESTART_SELF_ATOMIC_SERVICE_FAILED, ERROR_MSG_RESTART_SELF_ATOMIC_SERVICE_FAILED},
|
||||
{AbilityInnerErrorMsg::CONNECT_AGENT_EXTENSION_FAILED, ERROR_MSG_CONNECT_AGENT_EXTENSION_FAILED},
|
||||
{AbilityInnerErrorMsg::AGENT_EXTENSION_CONNECTION_ENDED, ERROR_MSG_AGENT_EXTENSION_CONNECTION_ENDED},
|
||||
{AbilityInnerErrorMsg::DISCONNECT_AGENT_EXTENSION_NOT_EXIST, ERROR_MSG_DISCONNECT_AGENT_EXTENSION_NOT_EXIST},
|
||||
{AbilityInnerErrorMsg::TRANSFER_EXTENSION_DATA_FAILED, ERROR_MSG_TRANSFER_EXTENSION_DATA_FAILED},
|
||||
{AbilityInnerErrorMsg::UI_WINDOW_NULL, ERROR_MSG_UI_WINDOW_NULL},
|
||||
{AbilityInnerErrorMsg::RELOAD_IN_MODAL_RESULT_NULL, ERROR_MSG_RELOAD_IN_MODAL_RESULT_NULL},
|
||||
@@ -630,7 +636,7 @@ std::string GetAgentManagerErrorMsg(int32_t errCode, AgentManagerErrorOperation
|
||||
}
|
||||
if (errCode == CONNECTION_NOT_EXIST) {
|
||||
if (operation == AgentManagerErrorOperation::DISCONNECT_AGENT_EXTENSION) {
|
||||
return GetInnerErrorMsg(AbilityInnerErrorMsg::DISCONNECT_AGENT_EXTENSION_NOT_EXIST);
|
||||
return ERROR_MSG_DISCONNECT_AGENT_EXTENSION_NOT_EXIST;
|
||||
}
|
||||
if (operation == AgentManagerErrorOperation::COMPLETE_LOW_CODE_AGENT) {
|
||||
return GetInnerErrorMsg(AbilityInnerErrorMsg::OPERATION_FAILED);
|
||||
|
||||
@@ -90,7 +90,8 @@ void JsQueryERMSObserver::CallPromise(napi_deferred deferred, const AtomicServic
|
||||
napi_resolve_deferred(env_, deferred, result);
|
||||
return;
|
||||
}
|
||||
napi_value error = CreateJsError(env_, GetJsErrorCodeByNativeError(resultCode));
|
||||
napi_value error = CreateJsErrorByNativeErr(env_, resultCode, "",
|
||||
GetInnerErrorMsg(AbilityInnerErrorMsg::QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED));
|
||||
napi_reject_deferred(env_, deferred, error);
|
||||
}
|
||||
|
||||
@@ -132,4 +133,4 @@ napi_value JsQueryERMSObserver::CreateJsAtomicServiceStartupRule(napi_env env,
|
||||
return handleEscape.Escape(object);
|
||||
}
|
||||
} // namespace AbilityRuntime
|
||||
} // namespace OHOS
|
||||
} // namespace OHOS
|
||||
|
||||
+2
-1
@@ -342,9 +342,10 @@ enum class AbilityInnerErrorMsg {
|
||||
OPERATION_FAILED,
|
||||
RESTORE_WINDOW_STAGE_FAILED,
|
||||
WRAP_ABILITY_RESULT_FAILED,
|
||||
QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED,
|
||||
RESTART_SELF_ATOMIC_SERVICE_FAILED,
|
||||
CONNECT_AGENT_EXTENSION_FAILED,
|
||||
AGENT_EXTENSION_CONNECTION_ENDED,
|
||||
DISCONNECT_AGENT_EXTENSION_NOT_EXIST,
|
||||
TRANSFER_EXTENSION_DATA_FAILED,
|
||||
UI_WINDOW_NULL,
|
||||
RELOAD_IN_MODAL_RESULT_NULL,
|
||||
|
||||
@@ -160,13 +160,14 @@ HWTEST_F(AbilityBusinessErrorTest, GetInnerErrorMsg_0100, TestSize.Level2)
|
||||
"Internal error. Operation failed. Try again later.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::RESTORE_WINDOW_STAGE_FAILED),
|
||||
"Internal error. Failed to restore the window stage. Check the local storage object and try again.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::QUERY_ATOMIC_SERVICE_STARTUP_RULE_FAILED),
|
||||
"Internal error. Failed to query the atomic service startup rule. Try again later.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::RESTART_SELF_ATOMIC_SERVICE_FAILED),
|
||||
"Internal error. Failed to restart the current atomic service. Try again later.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::CONNECT_AGENT_EXTENSION_FAILED),
|
||||
"Internal error. Failed to connect to the agent extension ability. Verify the target and try again.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::AGENT_EXTENSION_CONNECTION_ENDED),
|
||||
"Internal error. The agent extension connection ended before it was ready. Connect again.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::DISCONNECT_AGENT_EXTENSION_NOT_EXIST),
|
||||
"Internal error. The agent extension connection does not exist. "
|
||||
"Use an AgentProxy returned by connectAgentExtensionAbility.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::TRANSFER_EXTENSION_DATA_FAILED),
|
||||
"Internal error. Failed to transfer extension data to the window. Try again later.");
|
||||
EXPECT_EQ(GetInnerErrorMsg(AbilityInnerErrorMsg::UI_WINDOW_NULL),
|
||||
@@ -189,7 +190,8 @@ HWTEST_F(AbilityBusinessErrorTest, GetAgentManagerErrorMsg_0100, TestSize.Level2
|
||||
GetInnerErrorMsg(AbilityInnerErrorMsg::SERVICE_UNAVAILABLE));
|
||||
EXPECT_EQ(GetAgentManagerErrorMsg(AAFwk::CONNECTION_NOT_EXIST,
|
||||
AgentManagerErrorOperation::DISCONNECT_AGENT_EXTENSION),
|
||||
GetInnerErrorMsg(AbilityInnerErrorMsg::DISCONNECT_AGENT_EXTENSION_NOT_EXIST));
|
||||
"Internal error. The agent extension connection does not exist. "
|
||||
"Use an AgentProxy returned by connectAgentExtensionAbility.");
|
||||
EXPECT_EQ(GetAgentManagerErrorMsg(AAFwk::ERR_MAX_AGENT_CONNECTIONS_REACHED,
|
||||
AgentManagerErrorOperation::CONNECT_AGENT_EXTENSION),
|
||||
GetErrorMsg(AbilityErrorCode::ERROR_CODE_MAX_CONNECTIONS_REACHED));
|
||||
|
||||
Reference in New Issue
Block a user