| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
!20206 merge fix into master fix bug Created-by: xuzheheng Commit-by: x30044351 Merged-by: openharmony_ci Description: **IssueNo**: https://gitcode.com/openharmony/ability_ability_runtime/issues/15977 **Description**: fix bug **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | √ | | 成员变量进行赋值或创建需要排查并发 | √ | | 谨慎在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扫描): See merge request: openharmony/ability_ability_runtime!20206 | 2 天前 | |
!20217 merge master-E2E into master E2E接续 Created-by: weixin_55426550 Commit-by: MisterE Merged-by: openharmony_ci Description: **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) ## 报告元数据 yaml 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 **问题描述**: cpp int32_t userId = INVALID_USER_ID; if (!data.ReadInt32(userId)) { userId = INVALID_USER_ID; // 冗余:userId 已经是 INVALID_USER_ID } **影响**:代码冗余,不影响功能正确性。 **触发路径**:IPC 调用时,当客户端未传递 userId 参数(旧版本客户端)。 **建议**:移除冗余赋值,简化为: cpp int32_t userId = INVALID_USER_ID; data.ReadInt32(userId); // 失败时 userId 保持 INVALID_USER_ID --- **SEC-02 详细分析**: **位置**:services/abilitymgr/src/ability_manager_service.cpp:6769 **问题描述**: cpp 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(边界值) **影响**:测试覆盖不足,可能遗漏边界条件错误。 **建议**:补充测试用例: cpp 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 See merge request: openharmony/ability_ability_runtime!20217 | 2 天前 | |
E2E接续 Signed-off-by: MisterE<smart_e@126.com> Co-Authored-By: Agent | 13 天前 | |
RvokeFileUriPermission改为调用异步的sandboxManager接口 Signed-off-by: lidongrui <lidongrui3@huawei.com> Co-Authored-By: Agent 🤖 AI[0%] 🔧 Human Fixed[0%] 🧑 Human[100%] 👌 AI Adopted[0%] | 9 天前 | |
Merge branch 'master' of https://gitee.com/xuzhihao666/ability_ability_runtime_2 Signed-off-by: xuzhihao <xuzhihao16@huawei.com> | 2 年前 | |
独立编译-配合ability_runtime删除public_deps Signed-off-by: zhangzezhong <zhangzezhong8@huawei-partners.com> | 1 年前 | |
!20237 merge FixUpdateApplication into master 修复UpdateApplicationInfoInstalled未查询分身的问题 Created-by: SKY2001 Commit-by: SKY2001 Merged-by: openharmony_ci Description: **IssueNo**: https://gitcode.com/openharmony/ability_ability_runtime/issues/16003?ref=&did=4260220#tid-4260220 **Description**: **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | pass | | 成员变量进行赋值或创建需要排查并发 | pass | | 谨慎在lambda表达式中使用引用捕获 | pass | | 谨慎在未经拷贝的情况下使用外部传入的string、C字符串 | pass | | map\vector\list\set等stl模板类使用时需要排查并发 | pass | | 谨慎考虑加锁范围 | pass | | 在IPC通信中谨慎使用同步通信方式 | pass | | 禁止传递this指针至其他模块或线程(特别是eventhandler任务) | pass | | 禁止将外部传入的裸指针在内部直接构造智能指针 | pass | | 禁止多个独立创建的智能指针管理同一地址 | pass | | 禁止在析构函数中抛异步任务 | pass | | 禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁 | pass | | 禁止在对外接口中未经判空直接使用外部传入的指针 | pass | | 禁止接口返回局部变量引用 | pass | | 禁止在信号函数中加锁 | pass | | 禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作 | pass | | 禁止将同一个cpp编译在不同的so中 | pass | **安全编码自检:** | 自检项 | 自检结果 | | -------------------------------------------------------------- | -------- | | 裸指针避免通过隐式转换构造为sptr | pass | | json对象在取值之前必须先判断类型,避免类型不匹配 | pass | | 序列化时必须对传入的数组大小进行校验,避免出现超大数组 | pass | | 避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型 | pass | | 外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验 | pass | | 指针变量、表示资源描述符的变量、bool变量必须赋初值 | pass | | readParcelable获取的对象使用前需要判空 | pass | | 分配和释放内存的函数需要成对出现 | pass | | 申请内存后异常退出前需要及时进行内存释放 | pass | | 内存申请前必须对内存大小进行合法性校验 | pass | | 内存分配后必须判断是否成功 | pass | | 禁止使用realloc、alloca函数 | pass | | 禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰 | pass | | 禁止打印内存地址 | pass | | 整数之间运算时必须严格检查,确保不会出现溢出、反转、除0 | pass | | 禁止对有符号整数进行位操作符运算 | pass | | 禁止对指针进行逻辑或位运算 | pass | | 循环次数如果收外部数据控制,需要检验其合法性 | pass | | 禁止使用内存操作类危险函数,需要使用安全函数 | pass | | 谨慎使用不可重入函数 | pass | | 必须检查安全函数的返回值,并进行正确处理 | pass | | 禁止仅通过TokenType类型判断绕过权限校验 | pass | **TDD Result**: pass **XTS Result**: pass ### 是否已执行L0用例 - [ ] 已验证 - [ ] 不涉及。如不涉及,请写明理由 ### AI检视评分(使用本地代码检视skills扫描): See merge request: openharmony/ability_ability_runtime!20237 | 17 小时前 | |
移动blocklist位置 Signed-off-by: srr101 <songruirui1@huawei.com> | 2 年前 |