Skip to content

[0144] C++ 层为 g_rename 增加参数类型检查,修复非字符串参数导致的段错误 - #965

Merged
da-liii merged 3 commits into
mainfrom
da/0144/rename-type-check
Sep 8, 2026
Merged

da-liii merged 3 commits into
mainfrom
da/0144/rename-type-check

Conversation

@da-liii

@da-liii da-liii commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

问题

(g_rename 1 2) 会让 bin/gf 段错误(SIGSEGV, exit 139),见 demo/crash/c09-g_rename-integer.scm。

根因:src/liii_os.cpp 的 f_rename 直接 s7_string(s7_car(args)),对非字符串对象等同于把对象强转为字符串 cell 解引用,垃圾指针传入 std::filesystem::rename 触发段错误。

修复

沿用 #963(devel/0142.md)的模式,防御放在 C++ 层:f_rename 入口对 src、dst 分别检查 s7_is_string,非字符串返回 s7_wrong_type_arg_error。(liii os) 公开包装 rename 已有 string? 检查,本修复使根环境直接调用 g_rename 的代码也受保护。

测试

  • tests/liii/os/rename-test.scm 增加 3 条 C 层入口回归测试。TDD:修复前运行测试文件本身即段错误(exit 139),修复后 12/12 通过
  • (g_rename 1 2) 由 SIGSEGV 变为干净的 wrong-type-arg 报错(exit 255),验证后按惯例移除 demo/crash/c09-g_rename-integer.scm 并更新 README

备注

@da-liii
da-liii merged commit 71b5c00 into main Sep 8, 2026
5 checks passed
@da-liii
da-liii deleted the da/0144/rename-type-check branch September 8, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant