Pull Request已成功合入, 合并人@openharmony_ci
(感谢 xhz-sz 的贡献)开始进行AI检视!
AI review has been started, please wait...


| check type | result | report |
|---|---|---|
| start ai_review | pass | - |


⏱️ 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:
- 稍后重试 / Try again later
- 如果问题持续,请联系管理员 / If the issue persists, please contact the administrator
- 检查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 0x7f42e871abc0>, 'Connection to openharmonyinsight.cn timed out. (connect timeout=10)'))


您好,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.


IssueNo: https://gitcode.com/openharmony/ability_ability_runtime/issues/15939
Description:
稳定性自检:
安全编码自检:
TDD Result:
XTS Result:
是否已执行L0用例
AI检视评分(使用本地代码检视skills扫描):
代码检视报告 — PR #20216(Round 1 / 仅 PR 修改内容)
报告元数据
codecheck_report: schema_version: "1.0" scope: "PR #20216 — commit 659fb27 (production changes only)" round: 1 commit_id: "659fb275499043c3b01af127c21b999f58ff0bfb" change_id: "PR-20216 (GitCode, no Change-Id)" report_id: "659fb27-R1" date: "2026-08-16" gate_decision: "approve" risk_level: "low" score: 98 dimensions_required: ["security", "logic", "input"] dimensions_executed: ["security", "logic", "input"] findings_total: 1 findings_by_severity: {P0: 0, P1: 0, P2: 0, P3: 1} gate_blockers: [] must_fix: [] followups: ["LOG-001"]1. 门禁结论
一句话结论:本 PR 是一组连贯的健壮性加固(空指针守卫、IPC Parcel 指针 RAII 化、death-recipient 生命周期修正、Marshalling 返回值校验、死代码移除),未引入可触发缺陷;仅 1 条 P3 潜在设计耦合建议跟进,门禁通过。
范围与扫描器组合(Step 2 探测结果)
services/abilitymgr/src/(IPC + 内存缓存)+frameworks/native/.../ui_extension_base/want_receiver_stub.cppReadParcelable、wants_info.cppMarshalling/Unmarshallinginterfaces/kits/或.d.ts/.h签名变更(仅 .cpp 内部守卫)security-scanner+logic-scanner+input-scannerPR 概况
659fb275499043c3b01af127c21b999f58ff0bfb("fix bug",commit message 标注 91% AI 生成)720ecfc24294d661a795a4d9589593b47561e573(master HEAD)frameworks/js/napi/ability_manager/js_preload_ui_extension_callback_client.cppenv_空指针守卫frameworks/native/ability/native/ui_extension_base/js_ui_extension_context.cppCreateUIServiceExtConnection(含空检查)、DoDisconnectUIServiceExtensionComplete;disconnect 空连接时补return;;OnReportDrawnCompleted补 argc 守卫frameworks/native/ability/native/ui_service_extension_ability/js_ui_service_extension_context.cppRemoveConnectionObject()(空守卫)services/abilitymgr/src/ui_extension/ui_extension_ability_manager.cppRegisterPreloadUIExtensionHostClient去重 + AddDeathRecipient 校验 + 异常清理;CompleteBackground移除死代码CHECK_POINTERservices/abilitymgr/src/want_receiver_stub.cppWant*/WantParams*→std::unique_ptr(RAII,异常/早返回安全)services/abilitymgr/src/wants_info.cppMarshalling校验WriteParcelable/WriteString16返回值2. 扣分原因
3. 必须立即处理(P0/P1)
无。
4. 建议本轮或下一补档处理(P2/P3)
RegisterPreloadUIExtensionHostClient去重早返回跳过 record-manager token 刷新(潜在设计耦合,当前不可触发)recordMgr.Register(callerToken)(单例下幂等覆盖);② 在代码注释显式声明 "token-per-pid 稳定" 前置条件5. 分维度速览
AddDeathRecipient持锁无重入死锁(OpenHarmony 死亡通知异步派发,与既有app_state_observer_manager.cpp同模式);移除的CHECK_POINTER(abilityRecord)位于函数顶部空守卫(if (abilityRecord == nullptr) return;) 之后、且在两次解引用之后,为死代码;unique_ptr生命周期覆盖PerformReceive全作用域;env_/MakeSptr/GetServiceHostStub守卫放置正确;g_connects无新增竞态;Marshalling返回值校验正确。DoDisconnectUIServiceExtensionComplete与原内联 lambda 行为等价;disconnect 空return;为 bug 修复(旧代码以 null 调DisconnectAbility),RemoveUIServiceExtensionConnection幂等无新副作用。want_receiver_stubRAII 化(攻击者 parcel 对象异常/泄漏安全);②wants_info写侧返回值校验;③death-recipient map 持锁+返回校验+异常擦除(无 TOCTOU/死锁,catch 块为新获取锁);④g_connectserase 前 napi-ref 及时释放。callerPid来自IPCSkeleton::GetCallingPid(内核可信,不可伪造)。6. 关键发现详情
[LOG-001] RegisterPreloadUIExtensionHostClient 去重早返回跳过 record-manager token 刷新(P3, scanner=logic)
services/abilitymgr/src/ui_extension/ui_extension_ability_manager.cpp:583(去重return ERR_OK;处)preloadUIExtensionHostClientDeathRecipients_[P]=deathRecipient+recordMgr.preloadUIExtensionHostClientCallerTokens_[P]=tokenA。find(P)!=end()→return ERR_OK,跳过recordMgr.RegisterPreloadUIExtensionHostClient(callerToken)。PreloadUIExtensionHostClient为进程级单例(preload_ui_extension_host_client.cpp:51传GetInstance()),重复注册传入同一 token 对象,跳过覆盖为 no-op,无 token 过期。OnLoadedDone等回调经旧 token 仍可触发。原述"OnLoadedDone 永不触发"不成立。git show 659fb27:services/abilitymgr/src/ui_extension/ui_extension_ability_manager.cpp(去重分支)services/abilitymgr/src/extension_record/extension_record_manager.cpp:1200-1209(preloadUIExtensionHostClientCallerTokens_[callerPid] = callerToken;覆写语义)frameworks/native/ability/native/preload_ui_extension_host_client.cpp:51(GetInstance()单例 token)recordMgr.Register(callerToken)(单例下幂等);② 注释显式声明前置条件。refute_log.md)。7. 附录
附录 A:范围外/相邻观察(不计分)
[INP-001] WantsInfo::ReadFromParcel 未校验 ReadString16 失败(P3, 范围外)
services/abilitymgr/src/wants_info.cpp:30(resolvedTypes = Str16ToStr8(data.ReadString16());)Marshalling(校验WriteParcelable/WriteString16返回值),读侧ReadFromParcel/Unmarshalling未被修改且未校验ReadString16失败——截断入站 parcel 会静默得到resolvedTypes==""并返回成功,与写侧修复不对称。ReadFromParcel未被本 PR 修改,属既有问题;按用户"仅检视 PR 修改内容"约束,不计入本次计分,仅作相邻观察列出。建议后续单独处理读侧对称校验。附录 B:scanner 已排除/已考虑项(保留供人工捞回)
AddDeathRecipient持锁重入死锁app_state_observer_manager.cpp:1174-1213长期在网未死锁CHECK_POINTER(abilityRecord)致 NPECompleteBackground顶部已有if (abilityRecord == nullptr) return;(line 1556)且该 CHECK_POINTER 位于两次解引用之后,为死代码want_receiver_stubunique_ptr 生命周期PerformReceive(*want, ...)在 unique_ptr 作用域内,引用不悬空;旧异常路径泄漏已被 RAII 修复CreateUIServiceExtConnection部分失败语义stub==nullptr返回 nullptr 前未对want产生半修改;sptr返回 nullptr 正确释放引用计数OnReportDrawnCompletedargc 守卫后 execute lambdaargv[0];新守卫为严格 bug 修复,lambda 后续逻辑不受影响callerPid可伪造IPCSkeleton::GetCallingPid,内核可信,非 Parcel 来源附录 C:交付物清单
C:\Users\ABILIT~1\AppData\Local\Temp\opencode\codecheck_pr20216\codecheck_report_pr20216_20260816.md(本文件)C:\Users\ABILIT~1\AppData\Local\Temp\opencode\codecheck_pr20216\refute_log.mdC:\Users\ABILIT~1\AppData\Local\Temp\opencode\codecheck_pr20216\security_findings.mdC:\Users\ABILIT~1\AppData\Local\Temp\opencode\codecheck_pr20216\logic_findings.mdC:\Users\ABILIT~1\AppData\Local\Temp\opencode\codecheck_pr20216\input_findings.mdC:\Users\ABILIT~1\AppData\Local\Temp\opencode\pr_20216.diff附录 D:评分与门禁规则(归一化)
score = max(0, 100 − (30×P0 + 12×P1 + 5×P2 + 2×P3))=100 − (2×1) = 988. 变更摘要(交付)
659fb27相对 master720ecfc2,仅 6 个生产文件(+79/−22)。TAG_LOGE日志(符合 hilog_tag_wrapper 规范)。