| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
update: 更新文件 ability_manager_service.cpp Signed-off-by: yijobs <yisilong@h-partners.com> revert merge request: appindex适配 b600cbc41fac8523058557b8c939f1aa99ac20ba This revert merge request !20364 | 1 天前 | |
修复误删,补充tdd Signed-off-by: zhangatao <zhangtao662@huawei.com> Change-Id: I9e6a4636c1f4ad1082c351adfcc5989667cdf03c | 12 天前 | |
refactor(want_agent): remove empty WantSenderStub shell PendingWantRecord now inherits IRemoteStub<IWantSender> directly. WantSenderStub exported no symbols of its own and carried no logic, so drop it along with its dedicated unittest, fuzzer and map entry. Co-Authored-By: Agent AI[100%] Human Fixed[0%] Human[0%] AI Adopted[100%] Co-authored-by: claude (glm-5.3) <ai@local> Change-Id: Ie3012a58d4bf51a52a03858974feefd0f4792e1e Signed-off-by: RuiChen_01 <chenrui193@huawei.com> | 12 天前 | |
修复送检主干告警问题 Signed-off-by: SKY2001 <songtianyu10@huawei.com> AI[10%] Human Fixed[0%] Human[90%] AI Adopted[100%] | 6 天前 | |
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 年前 | |
!20386 merge u into master fix state Created-by: xhz-sz Commit-by: xhz-sz Merged-by: openharmony_ci Description: **IssueNo**: https://gitcode.com/openharmony/ability_ability_runtime/issues/16146 **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扫描): # 代码检视报告 — PR #20386: UIExtension foreground 状态机修复(Round 1 / 最新提交) > 统一报告由 codecheck 工作台生成,**用于门禁管控**。所有 codecheck 报告必须遵循本模板:章节顺序、字段名、报告元数据块、评分与门禁规则均为**固定格式**。 > 生成入口:[ README.md](C:\develop\code\ability_ability_runtime\skills\codecheck\README.md) → Step 5;合并逻辑见 [orchestrator/SKILL.md](C:\develop\code\ability_ability_runtime\skills\codecheck\orchestrator\SKILL.md)。 > 权威评分与门禁规则为**通用规则**,不在输出报告中呈现;生成时必须按 [conventions.md](C:\develop\code\ability_ability_runtime\skills\codecheck\conventions.md) §7(等级归一化)/ §8(必检维度)/ §9(评分与决策矩阵)计算,不得自创分值。 --- ## 报告元数据 > **门禁脚本只读取本 YAML 块**。字段名与取值域为固定合约,禁止改名、增删或自定义取值。人工阅读部分从「1. 门禁结论」开始。 yaml codecheck_report: schema_version: "1.0" scope: "PR #20386: UIExtension foreground 状态机修复 + 前台请求队列" round: 1 commit_id: "06c258a016231f93feefb2fb78aadfc77877cdf1" change_id: "N/A" report_id: "06c258a0-R1" date: "2026-09-07" gate_decision: "approve" risk_level: "low" score: 100 dimensions_required: ["security-scanner", "logic-scanner"] dimensions_executed: ["security-scanner", "logic-scanner"] findings_total: 0 findings_by_severity: {P0: 0, P1: 0, P2: 0, P3: 0} gate_blockers: [] must_fix: [] followups: [] --- ## 1. 门禁结论 | 项目 | 结论 | |---|---| | 决策 | **approve** | | 风险等级 | 🟢 low | | 评分 | **100/100** | | 阻塞项 | 无 P0 | | 必须修复(P0/P1) | 0 项 | | 建议跟进(P2/P3) | 0 项 | **一句话结论**:PR 修复 UIExtension 状态机 bug——移除 CompleteBackground 中不当的 FOREGROUNDING 状态设置(该状态导致 OnAbilityRequestDone 无法完成前台转换),新增基于时间戳的前台请求队列与生命周期取消机制(RemoveUIExtensionForegroundRequest)。代码质量优秀:锁序一致、空指针防护完备、弱引用回调安全、测试覆盖充分(8 个新测试)。同时推翻了 PR 自带 Round 2 报告的 SEC-01(P3 死代码)发现——经追踪继承链,ForegroundUIExtensionAbility() 仍会设置 FOREGROUNDING 状态,相关检查并非死代码。 --- ## 2. 扣分原因(仅 gate_decision=block 时呈现;approve/conditional/insufficient 时本节省略) > 本节省略(gate_decision=approve)。 --- ## 3. 必须立即处理(P0/P1) **无。** > 详情见第 6 节。 --- ## 4. 建议本轮或下一补档处理(P2/P3) **无。** --- ## 5. 分维度速览 | 维度 | 结果 | 关键说明 | |---|---|---| | security-scanner | 0 项 | 11 项检查全部通过:空指针/越界/UAF/整数溢出/死锁/资源泄漏/反序列化/敏感信息/系统框架/类安全/IPC 鉴权均无发现。RemoveUIExtensionForegroundRequest 锁模式与基类 CompleteStartServiceReq 一致;超时回调使用 weak_from_this() + weak_ptr<Queue> 双弱引用 + queue 身份检查,无 UAF 风险;taskHandler_ 和 requestQueue 均有 null 检查 | | logic-scanner | 0 项 | 状态机分析确认修复正确:OnAbilityRequestDone(line 390)仅在状态 ∈ {BACKGROUND, INITIAL, INACTIVE, ACTIVE} 时调用 ForegroundUIExtensionAbility(),旧代码设置 FOREGROUNDING 后该条件不满足导致前台卡死。移除后状态保持 BACKGROUND,OnAbilityRequestDone 可正常完成。CompleteForegroundInner(line 1634-1636)正确处理 pendingState=BACKGROUND 时触发 MoveToBackground,确保后台请求不丢失。时间戳取消机制(RemoveUIExtensionForegroundRequest)用 CLOCK_MONOTONIC 排序,正确处理 background IPC 与延迟重入的竞态 | | input-scanner | N/A | 本 PR 不涉及外部输入→持久化链路(无 IPC Stub/Parcel/DB/文件写入变更) | --- ## 6. 关键发现详情 无 P0/P1/P2/P3 发现。 --- ## 正面评价 | 方面 | 说明 | |---|---| | **Bug 修复正确性** | OnAbilityRequestDone(line 390-391)仅在 currentAbilityState ∈ {BACKGROUND, INITIAL, INACTIVE, ACTIVE} 时调用 ForegroundUIExtensionAbility()。旧代码在 CompleteBackground 中设置 FOREGROUNDING 后,状态变为 FOREGROUNDING,不在该集合中,导致前台转换无法完成。PR 移除该设置后状态保持 BACKGROUND,OnAbilityRequestDone 可正常完成前台转换 | | **状态机完整性** | 追踪继承链确认:BaseExtensionRecord 继承 AbilityRecord(base_extension_record.h:25),ForegroundUIExtensionAbility()(ability_record.cpp:474,#ifdef SUPPORT_SCREEN)仍通过 SetAbilityStateInner(FOREGROUNDING) 设置状态。因此 manager 中 3 处 IsAbilityState(FOREGROUNDING) 检查(DoBackgroundAbilityWindow line 507、DoForegroundUIExtension line 819、TerminateAbilityInner line 1341)仍可达且有效——在 ForegroundUIExtensionAbility 设置 FOREGROUNDING 到 CompleteForegroundInner 完成前台之间的窗口期内命中 | | **后台请求不丢失** | CompleteForegroundInner(line 1634-1636)检查 pendingState == BACKGROUND,若为真则调用 MoveToBackground。验证了在 IPC 转换期间到达的后台请求(经 DoBackgroundAbilityWindow 设置 pendingState=BACKGROUND)会在前台完成后被正确处理,不会丢失 | | **替代机制** | 新增 EnqueueStartServiceReq/CompleteStartServiceReq/RemoveUIExtensionForegroundRequest 三方法,用独立的 uiExtensionForegroundRequestMap_ 替代基类 startServiceReqList_,增加了基于 timespec 的时间戳排序,精确取消 background IPC 之前排入的请求,保留之后排入的请求 | | **锁安全** | 锁序一致:serialMutex_ → uiExtensionForegroundRequestMapLock_(BackgroundAbilityWindowLocked → RemoveUIExtensionForegroundRequest;CompleteBackground → CompleteStartServiceReq)。CompleteStartServiceReq 在锁外调用 StartAbilityLocked(与基类模式一致),避免嵌套锁。超时回调用 weak_from_this() 不持有 this,避免析构后访问 | | **空指针防护** | taskHandler_ 有 CHECK_POINTER(line 873);requestQueue 有 CHECK_POINTER(line 939);abilityRecord/sessionInfo 新增 CHECK_POINTER(line 1300-1301)。taskHandler_ 为 null 时请求仍保留在 map 中等待 CompleteStartServiceReq 完成(与基类行为一致,测试 UIExtensionForegroundRequest_005 验证) | | **弱引用回调** | 超时 lambda(line 874-892)捕获 weak_from_this() 和 weak_ptr<UIExtensionForegroundRequestQueue>,lock 后做 queue 身份检查(it->second != requestQueue),防止队列被替换后误删。与基类超时回调(ability_connect_manager.cpp:216)模式一致但更严谨 | | **资源生命周期** | 超时任务在 CompleteStartServiceReq 和 RemoveUIExtensionForegroundRequest 中正确 CancelTask;map 条目正确 erase;CompleteStartServiceReq 在锁外持有 shared_ptr<Queue> 副本遍历,即使 map 被修改队列仍存活 | | **日志规范** | requestCount 使用 %{public}zu(size_t),timeoutTaskCanceled 经 static_cast<int32_t>() 后 %{public}d,serviceUri 使用 %{public}s,与现有代码一致。无敏感信息泄漏 | | **测试覆盖** | 8 个新测试覆盖核心场景:BackgroundAbilityWindowLocked_002/003(后台取消排队请求 + record 级别隔离 + 重新排队)、DoBackgroundAbilityWindow_004(延迟重入不误删后续请求)、UIExtensionForegroundRequest_001(超时身份检查防误删重建队列)、UIExtensionForegroundRequest_002(超时清除同 URI 全部请求)、UIExtensionForegroundRequest_003(时间戳保留后续请求)、UIExtensionForegroundRequest_004(通用入口经基类 EnqueueStartServiceReq 路由)、UIExtensionForegroundRequest_005(无 taskHandler 仍可完成)、UIExtensionForegroundRequest_006(时间戳不可用时保守清除全部)、CompleteBackground_001(验证 pending foreground 后状态为 BACKGROUND) | --- ## 对 PR 自带 Round 2 报告的修正 | 原报告发现 | 原报告判定 | 本报告判定 | 理由 | |---|---|---|---| | SEC-01: FOREGROUNDING 状态在 UIExtension 路径已成死代码 | P3 | ❌ 推翻 | 原报告仅 grep ui_extension_ability_manager.cpp 中的 SetAbilityState,未追踪继承链。BaseExtensionRecord 继承 AbilityRecord,AbilityRecord::ForegroundUIExtensionAbility()(ability_record.cpp:474,#ifdef SUPPORT_SCREEN)仍调用 SetAbilityStateInner(FOREGROUNDING)。该状态在 OnAbilityRequestDone → ForegroundUIExtensionAbility 后设置,manager 中 3 处 FOREGROUNDING 检查仍可达 | --- ## 变更文件列表 | 文件 | 变更类型 | 行数 | |---|---|---| | services/abilitymgr/include/ability_connect_manager.h | 修改 | +6-2 | | services/abilitymgr/include/ui_extension/ui_extension_ability_manager.h | 修改 | +26-1 | | services/abilitymgr/src/ui_extension/ui_extension_ability_manager.cpp | 修改 | +151-3 | | test/unittest/ui_extension_ability_manager_third_test/ui_extension_ability_manager_third_test.cpp | 新增测试 | +406-1 | ## 验证命令和结果 | 命令 | 说明 | |---|---| | 编译:./build.sh --product-name <product> --build-target abilityms | AMS 编译 | | 单测:run -t UT -ts ui_extension_ability_manager_third_test | UIExtension 管理器单测(8 个新测试) | ## 兼容性/权限/DFX 影响 - **公共 API**:无变更(不涉及 interfaces/kits/) - **权限**:无变更(不涉及 PermissionVerification) - **DFX**:无变 See merge request: openharmony/ability_ability_runtime!20386 | 1 天前 | |
移动blocklist位置 Signed-off-by: srr101 <songruirui1@huawei.com> | 2 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 6 天前 | ||
| 2 年前 | ||
| 1 年前 | ||
| 1 天前 | ||
| 2 年前 |