freestanding_check: hosted-RNG check misses rand/srand in headers, macro aliases and function pointers
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 领域
- build-system, tooling
调研方向
Start in tools/freestanding_check.sh, where the hosted-RNG stage greps src/.c and extensions/.c for rand( and srand(), and read tools/freestanding_allowlist.txt to see why stage 1 passes. The proposed fix replaces the textual check with an nm -u scan of the hosted objects built by the gate's rows, so the design needs deciding first. Done when the four planted cases (static inline in a header, macro alias, function pointer, untracked file) make make freestanding-check exit nonzero, and src/freestanding/ stays green.
由索引模型根据 Issue 内容生成。
描述
The hosted-RNG half of tools/freestanding_check.sh (#1818; fail-closed fix in the PR for #2308) searches only tracked src/*.c and extensions/*.c, outside src/freestanding/, for the literal spelling rand( / srand(. The following reach libc rand/srand from hosted runtime code without being seen:
- A call inside a
static inlinefunction, or a macro body, in a header (src/*.h,extensions/*.h). - A call through a macro alias, e.g.
#define RNG randand thenRNG(), or through a function pointer (int (*r)(void) = rand;). - Untracked files.
git grepsearches the index, so a new file that has not beengit added is skipped in a local run. CI only sees committed files, so this matters only locally.
Stage 1 cannot catch any of these, because rand/srand are in tools/freestanding_allowlist.txt.
Possible root fix: check the symbol level instead of the spelling. Every hosted object built by the gate's rows would have no undefined reference to rand/srand (nm -u over the objects that are not freestanding), so headers, macros and pointers are all covered. The textual grep could stay as a fast first pass.
Found while reviewing the hq#58 fix (https://github.com/InauguralSystems/hq/issues/58).
Done when
- A planted
static inline int r(void) { return rand(); }in a header that a runtime.cfile includes and calls makesmake freestanding-checkexit nonzero. - A planted
#define RNG randplusRNG()insrc/*.cmakes it exit nonzero. - A planted
int (*p)(void) = rand;insrc/*.cmakes it exit nonzero. -
src/freestanding/keeps its ownrandimplementation, and that case is still green.
Generated by Claude Code
- 主要语言
- C
- 星标
- 3
- 派生
- 7
- 平均合并
- 6 小时 32 分钟
- 30 天内合并 PR
- 285
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
InauguralSystems/EigenScript 的其他 Issue
-
good first issue needs-triage
难度 1/5 1 小时以内 新手友好度 88/100
InauguralSystems/EigenScript#2347 · 1 条评论 ·
维护者通常 1 天内回复
-
needs-triage
难度 1/5 1 小时以内 新手友好度 82/100
InauguralSystems/EigenScript#2335 · 1 条评论 ·
维护者通常 1 天内回复
-
area:embed kind:bug
难度 2/5 1-3 小时 新手友好度 62/100
InauguralSystems/EigenScript#2311 · 1 条评论 ·
维护者通常 1 天内回复
-
area:gates kind:gate-defect
难度 2/5 1-3 小时 新手友好度 62/100
InauguralSystems/EigenScript#2305 · 1 条评论 ·
维护者通常 1 天内回复
-
area:ci bug found-by:duet-audit
难度 2/5 1-3 小时 新手友好度 62/100
InauguralSystems/EigenScript#2283 ·
维护者通常 1 天内回复
查看 InauguralSystems/EigenScript 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
FujiNetWIFI/fujinet-config#379 ·
维护者通常 1 天内回复
-
Ship /Local/Applications, the Local domain's Applications folder可能已有人在做 @pkgdemon 今天认领。 未关闭area:base enhancement
难度 1/5 1 小时以内 新手友好度 94/100
nextbsd/nextbsd-userland#612 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
zephyrproject-rtos/zephyr#125543 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
colbymchenry/codegraph#3277 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100