C# codegen: generated `Equals(object)` on `[SpacetimeDB.Type]` structs recurses forever
维护者通常 1 天内回复
已经有一个关联 PR 被合并了。
- #6303 来自 @lisandroct —— 已合并
评估
调研方向
问题位于 C# 源码生成器 crates/bindings-csharp/BSATN.Codegen/Type.cs 的第 809-818 行附近,结构体生成的 Equals(object) 重写在 Nullable 上调用 Equals(that_) 并递归。请先阅读该生成器代码,然后使用 issue 中的 Cell 结构体和 Equals(a, b) 示例复现问题。完成标准是生成的重写会解包可空值,例如调用 Equals(that_.Value),并且 reducer 不再发生栈溢出。
由索引模型根据 Issue 内容生成。
描述
Version: SpacetimeDB.Runtime 2.11.*, still on master e596513
Where: crates/bindings-csharp/BSATN.Codegen/Type.cs ~L809-818
public override bool Equals(object? that) {
if (that == null) return false;
var that_ = that as VoipCellCoord?; // for structs this is Nullable<T>
if (((object?)that_) == null) return false;
return Equals(that_); // binds to Equals(object?) again → infinite recursion
}
Repro:
[SpacetimeDB.Type] public partial struct Cell { public int X; public int Y; }
[SpacetimeDB.Reducer]
public static void Repro(ReducerContext ctx) {
Cell a = new() { X = 1 }; Cell? b = new Cell { X = 1 };
var same = Equals(a, b); // object.Equals → Cell.Equals(object) → stack overflow, wasm trap
}
Actual: the reducer traps with a deep recursion through VoipCellCoord__Equals_0 (RhBox at the bottom). Anything
that goes through Equals(object) is affected: object.Equals, EqualityComparer<T>.Default on boxed values,
collections of boxed structs.
Fix: for structs, return Equals(that_.Value); (or that is T t && Equals(t)).
- 主要语言
- Rust
- 星标
- 25.3k
- 派生
- 1.1k
- 平均合并
- 2 天 18 小时
- 30 天内合并 PR
- 65
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
clockworklabs/SpacetimeDB 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 84/100
clockworklabs/SpacetimeDB#6328 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
clockworklabs/SpacetimeDB#6314 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
clockworklabs/SpacetimeDB#6288 ·
维护者通常 1 天内回复
-
TypeScript server `ctx.random()`: first draw of every transaction is heavily biased (signed shift in `pcg32` seeding)可能已有人在做 @Tyagiquamar 于 2 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
clockworklabs/SpacetimeDB#6247 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
clockworklabs/SpacetimeDB#6146 ·
维护者通常 1 天内回复
查看 clockworklabs/SpacetimeDB 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 82/100
521xueweihan/HelloGitHub#4023 ·
-
难度 2/5 1-3 小时 新手友好度 68/100
nautechsystems/nautilus_trader#5365 ·
维护者通常 1 天内回复
-
documentation
难度 2/5 1-3 小时 新手友好度 78/100
IntersectMBO/developer-experience#347 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
registrystack/registry-stack#2168 ·
维护者通常 1 天内回复
-
bug crate: 3d help wanted triage
难度 2/5 1-3 小时 新手友好度 78/100
kornia/kornia-rs#1203 · 1 条评论 ·
维护者通常 1 天内回复