Skip to content

fix: SetPart 范围校验与 reserved 硬错(配合 kvlang body 直写收紧) - #46

Merged
miaobyte merged 1 commit into
mainfrom
fix/inplace-body-guard
Nov 1, 2026
Merged

miaobyte merged 1 commit into
mainfrom
fix/inplace-body-guard

Conversation

@miaobyte

@miaobyte miaobyte commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

与 kvlang runtimec2 侧配套的收紧:SetPart 只允许改 body。

对端

kvlang #607(body 直写改用 head 声明长度)与 #616(复合描述符)。单边合入会让「原地写只改 body」的契约半成立 —— runtime 按 head 长度写、后端仍放行任意 offset 时,越界不会被拦住。

内容(1 文件,+34/−2)

  • kvspaceSetPart:reserved key 硬错;offset 必须落在 body 区 [8, 8+len),越界直接报错,不再交给底层静默处理
  • kvspaceWriteInPlace / kvspaceWriteNewPlace:body 指针 8 字节对齐改为 debug_assert(这是前条件,不是假设)

双向证据(同一段调用,fs 后端)

本仓补丁没有新增测试文件,我用一次性 ABI 测试分别在两个版本上验证:
先 kvspaceConnect、写入 /k(int64=7),再 kvspaceSetPart(offset=0)(head 区)与 kvspaceSetPart(offset=8)(body 区)。

旧版本(b2eea59)

head_write_rc=0 body_write_rc=0
contract: head write ACCEPTED (old behaviour)

本补丁

head_write_rc=1 body_write_rc=0
contract: head write rejected

即:head 区写从「被放行」变为「硬错」,body 区写仍然正常。

回归

cargo test --release --offline 全绿(7 个测试二进制,test result: ok)。
说明:debug_assert 只在 debug 构建生效,release 下不改变行为。

🤖 Generated with Claude Code

- kvspaceSetPart:reserved key 硬错;offset 必须在 body 区 [8, 8+len),
  越界直接报错,不再交给底层静默处理
- kvspaceWriteInPlace / kvspaceWriteNewPlace:body 指针 8 字节对齐改为
  debug_assert(这是前条件,不是假设)

对端:kvlang #607 的 body 直写改用 head 声明长度。

Co-Authored-By: Claude Code <noreply@anthropic.com>
@miaobyte
miaobyte merged commit 7c48cae into main Nov 1, 2026
4 checks passed
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