Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

C# codegen: generated `Equals(object)` on `[SpacetimeDB.Type]` structs recurses forever

已关闭 适合新手
#6,124 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

已经有一个关联 PR 被合并了。

  • #6303 来自 @lisandroct —— 已合并

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
72/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
csharp
领域
devtools

调研方向

问题位于 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 模板
  • 没有贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

clockworklabs/SpacetimeDB 的其他 Issue

查看 clockworklabs/SpacetimeDB 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。