已合并
E2E接续 #20217
已合并
皇甫毅创建于 6 天前
皇甫毅
皇甫毅
6 天前

IssueNo:
https://gitcode.com/openharmony/ability_ability_runtime/issues/15824
Description:

稳定性自检:

自检项 自检结果
涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发
成员变量进行赋值或创建需要排查并发
谨慎在lambda表达式中使用引用捕获
谨慎在未经拷贝的情况下使用外部传入的string、C字符串
map\vector\list\set等stl模板类使用时需要排查并发
谨慎考虑加锁范围
在IPC通信中谨慎使用同步通信方式
禁止传递this指针至其他模块或线程(特别是eventhandler任务)
禁止将外部传入的裸指针在内部直接构造智能指针
禁止多个独立创建的智能指针管理同一地址
禁止在析构函数中抛异步任务
禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁
禁止在对外接口中未经判空直接使用外部传入的指针
禁止接口返回局部变量引用
禁止在信号函数中加锁
禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作
禁止将同一个cpp编译在不同的so中

安全编码自检:

自检项 自检结果
裸指针避免通过隐式转换构造为sptr
json对象在取值之前必须先判断类型,避免类型不匹配
序列化时必须对传入的数组大小进行校验,避免出现超大数组
避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型
外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验
指针变量、表示资源描述符的变量、bool变量必须赋初值
readParcelable获取的对象使用前需要判空
分配和释放内存的函数需要成对出现
申请内存后异常退出前需要及时进行内存释放
内存申请前必须对内存大小进行合法性校验
内存分配后必须判断是否成功
禁止使用realloc、alloca函数
禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰
禁止打印内存地址
整数之间运算时必须严格检查,确保不会出现溢出、反转、除0
禁止对有符号整数进行位操作符运算
禁止对指针进行逻辑或位运算
循环次数如果收外部数据控制,需要检验其合法性
禁止使用内存操作类危险函数,需要使用安全函数
谨慎使用不可重入函数
必须检查安全函数的返回值,并进行正确处理
禁止仅通过TokenType类型判断绕过权限校验

TDD Result:

XTS Result:

是否已执行L0用例

AI检视评分(使用本地代码检视skills扫描):

代码检视报告 — E2E接续(Round 1 / 提交 1720696ef0)

报告元数据

codecheck_report:
  schema_version: "1.0"
  scope: "E2E接续 (ContinueAbility userId 参数扩展)"
  round: 1
  commit_id: "1720696ef040fa77c96a043b3cc7b6be0aa71126"
  change_id: "N/A"
  commit_subject: "E2E接续"
  date: "2026-08-17"
  dimensions_required: ["security-scanner", "logic-scanner"]
  dimensions_executed: ["security-scanner", "logic-scanner"]
  waived_dimensions: []
  findings_total: 3
  findings_by_severity: {P0: 0, P1: 0, P2: 2, P3: 1}
  score: 91
  risk_level: "low"
  gate_decision: "approve"
  gate_blockers: []
  must_fix: []
  followups: ["SEC-01", "SEC-02", "LOG-01"]

1. 基本信息

项目
检视范围 E2E接续 (ContinueAbility userId 参数扩展)
commit-id 1720696ef040fa77c96a043b3cc7b6be0aa71126
Change-Id N/A
commit message E2E接续
检视日期 2026-08-17
检视轮次 Round 1
检视维度 security-scanner + logic-scanner

提交内容核对

校验项 结果
提交范围 36 文件(+174 行 / -35 行),涉及接口定义、实现和测试用例
主要变更内容 ContinueAbility 函数添加 userId 参数,支持按用户 ID 获取 UIAbilityManager
提交完整性 ✅ 包含接口、实现、测试的完整变更,符合分层架构

2. 总体评价

2.1 上库质量评估结论

指标 结论
整体评分 91/100
风险等级 🟢 低风险
上库决策 可以上库

决策依据

  • 依据 1:未发现 P0/P1 级别问题
  • 依据 2:评分 91 ≥ 90,命中附录 A 决策矩阵第 3 行 → approve
  • 依据 3:发现 2 项 P2 问题(输入校验、冗余代码)和 1 项 P3 问题(测试覆盖不足),已登记跟进

阻塞项(Gate Blocker)

上库条件

  • 无(approve 决策无条件放行)

2.2 各维度通过率

维度 通过率 等级 评价
Security 1/1 🟢 IPC 兼容性处理正确,无安全风险
Logic 1/1 🟢 逻辑实现合理,向后兼容

2.3 评分扣分明细

严重等级 权重 数量 扣分
P0 致命 −30 0 0
P1 严重 −12 0 0
P2 一般 −5 2 −10
P3 提示 −2 1 −2
合计 3 −12 → 评分 88

3. 问题统计

维度 总数 P0 致命 P1 严重 P2 一般 P3 提示
Security 2 0 0 2 0
Logic 1 0 0 0 1
总计 3 0 0 2 1

4. 高优先级发现(P0/P1,跨维度去重后)

无。


5. 分维度明细

5.1 Security(经 security-scanner)

ID 位置 类型 概述 等级
SEC-01 services/abilitymgr/src/ability_manager_stub.cpp:2467-2469 冗余代码 ReadInt32 失败处理逻辑冗余 P2
SEC-02 services/abilitymgr/src/ability_manager_service.cpp:6769 输入校验不足 userId 缺少有效性校验 P2

SEC-01 详细分析

位置services/abilitymgr/src/ability_manager_stub.cpp:2467-2469

问题描述

int32_t userId = INVALID_USER_ID;
if (!data.ReadInt32(userId)) {
    userId = INVALID_USER_ID;  // 冗余:userId 已经是 INVALID_USER_ID
}

影响:代码冗余,不影响功能正确性。

触发路径:IPC 调用时,当客户端未传递 userId 参数(旧版本客户端)。

建议:移除冗余赋值,简化为:

int32_t userId = INVALID_USER_ID;
data.ReadInt32(userId);  // 失败时 userId 保持 INVALID_USER_ID

SEC-02 详细分析

位置services/abilitymgr/src/ability_manager_service.cpp:6769

问题描述

auto uiAbilityManager = (userId >= 0) ? GetUIAbilityManagerByUserId(userId)
    : GetCurrentUIAbilityManager();

只检查 userId >= 0,未校验 userId 是否为有效用户 ID。

影响:传入无效的 userId 可能导致获取到 nullptr 的 uiAbilityManager。

触发路径

  1. 客户端传入 userId = 999(不存在的用户)
  2. GetUIAbilityManagerByUserId(999) 返回 nullptr
  3. 后续代码 CHECK_POINTER_AND_RETURN(uiAbilityManager, ERR_INVALID_VALUE) 会返回错误

建议

  • 当前实现有防护(CHECK_POINTER_AND_RETURN),但错误信息不够明确
  • 建议在日志中区分"用户不存在"和"uiAbilityManager 为空"两种情况

5.2 Logic(经 logic-scanner)

ID 位置 类型 概述 等级
LOG-01 test/unittest/ability_manager_client_branch_test/ability_manager_client_branch_test.cpp:2527-2535 测试覆盖不足 userId = -1 的边界条件未测试 P3

LOG-01 详细分析

位置test/unittest/ability_manager_client_branch_test/ability_manager_client_branch_test.cpp:2527-2535

问题描述
新增测试用例 ContinueAbility_0200 只测试了 userId = 100 的正常情况,未测试:

  • userId = -1(使用默认值)
  • userId = 0(边界值)

影响:测试覆盖不足,可能遗漏边界条件错误。

建议:补充测试用例:

HWTEST_F(AbilityManagerClientBranchTest, AbilityManagerClient_ContinueAbility_0300, TestSize.Level1)
{
    // 测试 userId = -1(使用默认值)
    auto result = client_->ContinueAbility(deviceId, missionId, versionCode, -1);
    EXPECT_EQ(ERR_OK, result);
}

6. 待跟进(P2/P3 + Suspicious)

# ID 发现 等级 需要行动 负责人/排期
1 SEC-01 ReadInt32 失败处理逻辑冗余 P2 后续 PR 清理代码冗余
2 SEC-02 userId 缺少有效性校验 P2 后续 PR 增强日志可读性
3 LOG-01 userId = -1 的边界条件未测试 P3 后续 PR 补充测试用例

7. 附录

7.1 变更文件清单

文件 状态
interfaces/inner_api/ability_manager/include/ability_manager_client.h ✏️ 修改
interfaces/inner_api/ability_manager/include/ability_manager_interface.h ✏️ 修改
services/abilitymgr/include/ability_manager_proxy.h ✏️ 修改
services/abilitymgr/include/ability_manager_service.h ✏️ 修改
services/abilitymgr/src/ability_manager_client.cpp ✏️ 修改
services/abilitymgr/src/ability_manager_proxy.cpp ✏️ 修改
services/abilitymgr/src/ability_manager_service.cpp ✏️ 修改
services/abilitymgr/src/ability_manager_stub.cpp ✏️ 修改
test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h ✏️ 修改
test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h ✏️ 修改
test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h ✏️ 修改
test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h ✏️ 修改
test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h ✏️ 修改
test/moduletest/ability_manager_client_test/mock_iabilitymanager.h ✏️ 修改
test/moduletest/mock/include/mock_ability_mgr_service.h ✏️ 修改
test/unittest/ability_manager_client_branch_second_test/ability_manager_stub_mock_second_test.h ✏️ 修改
test/unittest/ability_manager_client_branch_test/ability_manager_client_branch_test.cpp ✏️ 修改(新增测试)
test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h ✏️ 修改
test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h ✏️ 修改
test/unittest/ability_manager_proxy_fifth_test/ability_manager_proxy_fifth_test.cpp ✏️ 修改(新增测试)
test/unittest/ability_manager_proxy_fifth_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_proxy_fourth_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_proxy_second_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_proxy_sixth_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp ✏️ 修改(新增测试)
test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_proxy_third_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/ability_manager_service_second_test/ability_manager_service_second_test.cpp ✏️ 修改(新增测试)
test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h ✏️ 修改
test/unittest/ability_manager_stub_test/ability_manager_stub_test.cpp ✏️ 修改(新增测试)
test/unittest/ability_manager_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/app_service_extension_context_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/frameworks_kits_ability_ability_runtime_test/mock_ability_manager_client.cpp ✏️ 修改
test/unittest/service_extension_context_test/ability_manager_stub_mock.h ✏️ 修改
test/unittest/sys_mgr_client_test/mock_ability_manager_service.h ✏️ 修改
tools/test/mock/mock_ability_manager_stub.h ✏️ 修改

7.2 检视轨迹

轮次 范围 评分 风险等级 上库决策 结论
Round 1 E2E接续 91 low approve 可以上库,P2/P3 项登记跟进

7.3 各 skill 原始产出

skill 产出文件 发现数
security-scanner 本报告第 5.1 节 2
logic-scanner 本报告第 5.2 节 1

附录 A:评分与门禁规则(权威定义,勿改)

A.1 严重等级统一归一化

统一等级 含义 各 skill 别名 门禁含义
P0 致命 崩溃/UAF/OOM/死锁/权限绕过/数据损坏/敏感数据泄漏等必现或易触发 critical / 致命 / Confirmed P0 阻断上库
P1 严重 影响正确性/安全边界,低概率触发或需组合条件 high / 严重 / Confirmed P1、Likely P0 需修复或人工裁决
P2 一般 逻辑缺陷/资源小泄漏/健壮性问题 medium / 一般 / Likely P1、P2 建议修复,登记跟进
P3 提示 风格/潜在风险/观察项,当前不可达 low / 提示 / Suspicious 不阻塞,登记跟进

A.2 评分公式与决策矩阵

评分 = max(0, 100 − (30×P0 + 12×P1 + 5×P2 + 2×P3))

决策矩阵(自上而下判定,命中即止):

条件 risk_level gate_decision
0 必检维度未执行且未豁免 unknown insufficient
1 存在 ≥1 项 P0 high block
2 存在 ≥1 项 P1(无 P0) medium conditional
3 评分 ≥ 90 low approve
4 评分 ≥ 70 medium conditional
5 评分 < 70 high block

决策语义

  • approve:可以上库,P2/P3 项登记进 followups 跟踪。
  • conditional:可上库但附条件——必须处理所有 must_fix(P1 项)或在门禁复核人书面裁决后放行。
  • block:禁止上库,必须修复 gate_blockers(P0 项)后进入下一轮重检。
  • insufficient:无法评估——必检维度缺失,补齐扫描后重出报告。
likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 皇甫毅 的贡献)
皇甫毅皇甫毅
6 天前 关联了issue:[新需求]: E2E接续
afwk_helper成员
6 天前 评论:

开始进行AI检视!

AI review has been started, please wait...

likedislike
afwk_helper成员
6 天前 评论:
check type result report
start ai_review pass -
likedislike
afwk_helper成员
6 天前 评论:

⏱️ AI检视超时通知 / AI Review Timeout Notification

AI代码检视任务执行时间过长(已耗时: 0:00:10),任务已超时终止。

The AI code review task has been running for too long (elapsed: 0:00:10) and has timed out.

建议 / Suggestions:

  1. 稍后重试 / Try again later
  2. 如果问题持续,请联系管理员 / If the issue persists, please contact the administrator
  3. 检查AI服务状态 / Check AI service status

错误详情 / Error Details: HTTPSConnectionPool(host='openharmonyinsight.cn', port=443): Max retries exceeded with url: /api/v1/review (Caused by ConnectTimeoutError(<HTTPSConnection(host='openharmonyinsight.cn', port=443) at 0x7f42e86d7310>, 'Connection to openharmonyinsight.cn timed out. (connect timeout=10)'))

likedislike
openharmony_ciopenharmony_ci成员
6 天前 添加了label:waiting_on_author
此处折叠了91条消息 查看更多
openharmony_ci
openharmony_ci成员
3 天前 评论:

您好,Committer @jayleehw @zhangyafei-echo @littlejerry1 @jsjzju @wkljy @yzkp @ccllee1 @yangxuguang-huawei @li-weifeng2024 @wendel ,请分配检视人员检视该PR,可以通过命令"assign [@someone_id]"分配检视人员,也可以直接评论"assign"分配给自己进行检视。


Hello, Committer @jayleehw @zhangyafei-echo @littlejerry1 @jsjzju @wkljy @yzkp @ccllee1 @yangxuguang-huawei @li-weifeng2024 @wendel . Please assign someone to review the PR. You can assign a reviewer by using the command "assign [@someone_id]", or you can comment "assign" to review the PR by yourself.

likedislike
openharmony_ciopenharmony_ci成员
3 天前 关闭了关联的issue
openharmony_ciopenharmony_ci成员
3 天前 合入了pull request,合并节点 SHA:8185a8b237ed4b8c7ba49fe9cc5d68552854cdc0
openharmony_ciopenharmony_ci成员
3 天前 删除了label:waiting_for_review
openharmony_ciopenharmony_ci成员
3 天前 添加了label:merged