Skip to content

Release v1.0.2 - #11

Merged
nyoki-mtl merged 1 commit into
mainfrom
export-release-v1.0.2
Jul 21, 2026
Merged

Release v1.0.2#11
nyoki-mtl merged 1 commit into
mainfrom
export-release-v1.0.2

Conversation

@nyoki-mtl

Copy link
Copy Markdown
Owner

SAZ2 自己対局データの codec にあった桁溢れバグの修正リリース。

修正内容

SAZ2 の policy prior は合計が 65535 に一致することを要求するが、encoder と decoder のどちらも合計を u32 に積み上げて比較していた。65535 × 65537 = u32::MAX ちょうどという関係から、policy entry 65539 件で真の合計を 2^32 + 65535 にすると u32 がラップして偽の合計 65535 が成立する。

[profile.release]overflow-checks を設定しておらず release では既定の false のため、偽造 chunk が Ok で受理される。debug build では同じ入力が加算で panic するため、信頼できない入力での可用性の問題でもある。いずれも実機で再現を確認した。

合計の積み上げをやめ、65535 を初期残余として checked_sub で引く PriorBudget に置き換えた。超過はその場で捉えられ、桁溢れが原理的に起きない。encoder と decoder が同じ型を経由するため、同じ検証が 2 箇所に独立して存在する状態も解消している。

互換性

SAZ2 の wire format と public API は変更なし。これまで有効だった chunk はそのまま有効で、出力バイト列も同一。影響を受けるのは不正な入力だけ。

検証

  • 回帰テスト 3 件を追加(65539 件の手組み payload を decoder / encoder の両方で拒否することを固定)
  • debug / release の両プロファイルで通過を確認
  • make check 全通過

- SAZ2 自己対局データの policy prior 合計検証で u32 が桁溢れし、偽造 chunk が
  受理される問題を修正
- overflow-checks が無効な release build で検証を通過していた(debug build では
  同じ入力が panic)
- SAZ2 の wire format と public API は変更なし
@nyoki-mtl
nyoki-mtl merged commit 6b558d7 into main Jul 21, 2026
7 checks passed
@nyoki-mtl
nyoki-mtl deleted the export-release-v1.0.2 branch July 21, 2026 04:32
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