openharmony_ci fc26dbf1ac !421 merge master into master
Unlink symlink before delete sandbox

Created-by: gcw_vVJz6kSm
Commit-by: gcw_vVJz6kSm
Merged-by: openharmony_ci
Description: ### 关联的issue:https://gitcode.com/openharmony/accesscontrol_sandbox_manager/issues/357

### 修改描述(修改功能描述,规格变更说明):

### 测试用例(附上截图,不涉及不需要说明不涉及原因):
1、TDD:![image.png](https://raw.gitcode.com/user-images/assets/4433995/ab478d03-f1bc-4c04-b3e9-ecc0322c4a77/image.png 'image.png')

2、XTS:不涉及

3、手工用例(自验证步骤/预期结果/实际结果):不涉及

### 兼容性上库自检:
- [x] 不涉及组件视觉效果发生变化
- [x] 不涉及组件布局调整
- [x] 不涉及组件交互体验发生变化
- [x] 不涉及组件动效发生变化
- [x] 不涉及组件无障碍、适老化、全球化规格变化
- [x] 不涉及API功能发生变化
- [x] 不涉及改变回调函数或生命周期的触发时机或时序,或删除生命周期和回调函数
- [x] 不涉及参数的规格发生了变化,例如取值范围缩小等
- [x] 不涉及对外接口新增权限校验
- [x] 不涉及接口的使用约束规格收紧,例如权限开放范围变化
- [x] 不涉及系统可创建的实例数量收紧
- [x] 不涉及修改了接口返回的数据
- [x] 未新增错误抛出,包括新增错误码、对已有的场景从不会抛错误码变成会抛出错误
- [x] 未修改已有的错误码,对于相同的输入原本抛出A错误码变成了抛出B错误码
- [x] 接口性能未出现明显劣化

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

### 日志规范自检:
- [x] 【规则】高频代码的正常流程中禁止打印日志
- [x] 【规则】在基本不可能发生的点必须要打印日志
- [x] 【规则】事件记录的日志使用who do what 主谓宾的形式打印
- [x] 【规则】状态变化的日志打印使用state_name:s1->s2, reason:msg的形式打印
- [x] 【规则】参数值的日志打印使用name1=value1, name2=value2…的形式打印

### 是否已执行L0用例
- [x] 已验证
- [ ] 不涉及。如不涉及,请写明理由

一、基本信息

  ┌──────────┬─────────────────────────────────────────────────────────────────────┐
  │    项    │                                内容                                 │
  ├──────────┼─────────────────────────────────────────────────────────────────────┤
  │ commit   │ bb3d6fd Unlink symlink before delete sandbox                        │
  ├──────────┼─────────────────────────────────────────────────────────────────────┤
  │ 父提交   │ 0ee5682 (!418 merge bugfix1 into master)                            │
  ├──────────┼─────────────────────────────────────────────────────────────────────┤
  │ 改动文件 │ modules/claw_sandbox/src/sandbox_manager.cpp(1 个文件,+39 / −26) │
  ├──────────┼─────────────────────────────────────────────────────────────────────┤
  │ 对外接口 │ SandboxManager::DeleteSandboxDir(),未变(无头文件改动)            │
  └──────────┴─────────────────────────────────────────────────────────────────────┘

  二、变更内容

  1. 拆分函数:DeleteSandboxDir() 拆出文件级 static 自由函数 RemoveSandboxDirTree()(41 行),主函数保留校验流程后委托调用(27
  行),均满足 50 行约束。
  2. 核心功能:remove_all 之前用 unlink() 递归删除沙箱目录树内所有软链接。
  3. 顺带修复:一处 std::cerr 续行 << 从行首移到行尾(风格)。

  三、问题清单

  🔴 无阻塞问题

  🟡 主要问题

  无。

  🟢 次要 / 建议(按优先级)

  1.【需业务确认】unlink 前置删除的动机需明确
  std::filesystem::remove_all 本身并不跟随符号链接(只删除链接本身)。若本次要修的场景是"软链接指向仍挂载的挂载点导致 remove_all
  失败",则 unlink 只删链接、不会卸载挂载点,真正的挂载清理仍需另行处理。建议在 commit message
  或注释里写明实际缺陷现象,确认该方案能覆盖根因。
  回复:因remove_all无法移除symlink,需要提前unlink。

  2.【次要】unlink() 返回值未检查
  循环内 unlink(it->path().c_str()) 返回值被忽略。若失败(如 EPERM),软链接残留,最终由 remove_all
  兜底上报错误——功能上可接受(错误不会静默消失),但建议对返回值做检查或加注释说明是 best-effort。
  回复:沙箱销毁流程,unlink如果失败则remove_all失败,结果一致,不影响其它逻辑,只做尽力而为的销毁。

  3.【建议】遍历中途错误被静默吞掉
  循环条件 !ec 使遍历出错时提前退出,随后不检查 ec 直接进入 remove_all。若中途读目录出错(如权限),部分软链接未删,remove_all
  仍会尽力删除。可接受,但建议补充注释说明该循环是尽力而为。
  回复:沙箱销毁流程,unlink如果失败则remove_all失败,结果一致,不影响其它逻辑,只做尽力而为的销毁。

  四、正面确认项

  -  正确性:recursive_directory_iterator 默认不进入目录软链接,unlink 只删链接本身,不会沿链接走出沙箱或死循环。
  -  健壮性:全程使用 error_code 重载,不抛异常;skip_permission_denied 容忍无权限子目录。
  -  依赖齐全:unlink/<unistd.h>、<filesystem>、<sys/stat.h> 均已 include,可编译。
  -  风格:static 自由函数写法与 IsDirectoryExist/TrimEnvKey 等既有 helper 一致;行数达标;无行首运算符。
  -  无头文件/对外接口变更;无其它文件受影响。

  五、结论

  建议合入。无阻塞和主要问题。


See merge request: openharmony/accesscontrol_sandbox_manager!421
2026-08-19 16:07:10 +08:00
2025-08-27 15:23:41 +08:00
2023-12-19 16:03:56 +08:00
2026-07-10 18:12:31 +08:00
2026-07-06 20:23:54 +08:00
2026-05-07 16:59:43 +08:00
2024-05-09 17:20:47 +08:00
2026-03-30 16:27:42 +08:00
S
Description
沙箱管控策略的持久化管理与策略下发
9.6 MiB
Languages
C++ 98.3%
C 1.7%