Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto Apto para principiantes
#6,124 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
csharp
Área
devtools

Línea de trabajo

El error está en el generador de código fuente de C# en crates/bindings-csharp/BSATN.Codegen/Type.cs, alrededor de las líneas 809-818, donde el override Equals(object) generado para structs llama a Equals(that_) sobre un Nullable y se recursiona. Empieza leyendo el código del emisor y luego reproduce el problema con el struct Cell y el ejemplo Equals(a, b) del issue. Está terminado cuando el override generado desenvuelve el valor nullable, por ejemplo llamando a Equals(that_.Value), y el reducer deja de desbordar la pila.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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)).

Lenguaje dominante
Rust
Estrellas
25.3k
Forks
1.1k
Merge medio
4 d 4 h
PR fusionados (30 d)
53

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de clockworklabs/SpacetimeDB

Todos los issues de clockworklabs/SpacetimeDB

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.