C# codegen: generated `Equals(object)` on `[SpacetimeDB.Type]` structs recurses forever
Les mainteneurs répondent en général sous 1 jour
Une pull request liée a déjà été fusionnée.
- #6303 par @lisandroct — fusionnée
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
Piste de recherche
Le bug se trouve dans le générateur de source C# à crates/bindings-csharp/BSATN.Codegen/Type.cs, autour des lignes 809-818, où la surcharge Equals(object) générée pour les structs appelle Equals(that_) sur un Nullable et se rappelle récursivement. Commence par lire le code de l'émetteur, puis reproduis le problème avec la struct Cell et l'exemple Equals(a, b) de l'issue. C'est terminé lorsque la surcharge générée déballe la valeur nullable, par exemple en appelant Equals(that_.Value), et que le reducer ne déborde plus la pile.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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)).
- Langage dominant
- Rust
- Étoiles
- 25.5k
- Forks
- 1.1k
- Merge moyen
- 3 j 19 h
- PR mergées (30 j)
- 81
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de clockworklabs/SpacetimeDB
-
Rust SDK: default `brotli` features export C symbols from `cdylib` clientsPeut-être pris @Tyagiquamar l’a pris il y a 3 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
clockworklabs/SpacetimeDB#6430 ·
Les mainteneurs répondent en général sous 1 jour
-
Unreal SDK: no way to set confirmed reads on the connection (Rust SDK has with_confirmed_reads)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
clockworklabs/SpacetimeDB#6328 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
TS SDK: failed procedure calls reject with a bare string instead of an ErrorPeut-être pris @Tyagiquamar l’a pris il y a 15 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
clockworklabs/SpacetimeDB#6288 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
TypeScript server `ctx.random()`: first draw of every transaction is heavily biased (signed shift in `pcg32` seeding)Peut-être pris @Tyagiquamar l’a pris il y a 20 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
clockworklabs/SpacetimeDB#6247 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
clockworklabs/SpacetimeDB#6146 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de clockworklabs/SpacetimeDB
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
fritzprix/libr-agent#2612 ·
Les mainteneurs répondent en général sous 1 jour
-
crate: spate-core priority: low
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
NSPG13/agent-bounties#1749 ·
Les mainteneurs répondent en général sous 1 jour
-
area: web bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
kinqsradio/orbyn-engineering#227 ·
Les mainteneurs répondent en général sous 1 jour
-
移动端下载页实时吞吐与筛选栏滚动层级不一致Ouverteenhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour