!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:
openharmony_ci
2026-06-08 10:55:28 +08:00
6 changed files with 23 additions and 11 deletions
@@ -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
@@ -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));