microsoft / microsoft/TypeScript

Crash: malformed object destructuring assignment panics in class fields transform

Aperta
#63,963 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

🔎 Search Terms

visitObjectAssignmentElement, IsObjectBindingOrAssignmentElement, class fields destructuring crash, flattenDestructuringAssignment, "Debug failure. False expression", private name destructuring emit

🕗 Version & Regression Information
  • This is a crash
  • This is the behavior in every version I tried: TypeScript 6.0.3 (JS) and 7.1.0-dev (main, Go)
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=6.0.0-dev.20260416#code/BQbwHsCCB0DEC+BeIA

💻 Code
({x(A.#}=
🙁 Actual behavior
panic: Debug failure. False expression. [recovered, repanicked]

goroutine 82 [running]:
sync.(*WaitGroup).Go.func1.1()
        sync/waitgroup.go:251 +0x48
panic({0x105cc58e0?, 0x53098de1dce0?})
        runtime/panic.go:860 +0x12c
github.com/microsoft/TypeScript/tsc/internal/debug.Fail(...)
        github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:14
github.com/microsoft/TypeScript/tsc/internal/debug.assertSlow(...)
        github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:60 +0x5c
github.com/microsoft/TypeScript/tsc/internal/debug.Assert(...)
        github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:49
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*classFieldsTransformer).visitObjectAssignmentElement(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/classfields.go:3321 +0x6c
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitSlice(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:148 +0xa0
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitNodes(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:99 +0x3c
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*classFieldsTransformer).visitAssignmentPattern(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/classfields.go:3360 +0xcc
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*classFieldsTransformer).visitAssignmentTarget(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/classfields.go:372 +0x30
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*classFieldsTransformer).visitBinaryExpression(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/classfields.go:1462 +0x7a8
... 108 lines truncated ...
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emitJSFile(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:200 +0x198
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emit(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:50 +0xec
github.com/microsoft/TypeScript/tsc/internal/compiler.(*Program).Emit.func2()
        github.com/microsoft/TypeScript/tsc/internal/compiler/program.go:1851 +0x1c0
🙂 Expected behavior

The compiler should not crash 😄

Additional information about the issue

Disclosure: This crash was found with a custom mutation fuzzer and AI assistance (Kimi K3). The input was minimized and then verified by hand against TypeScript 7.1.0-dev (main) and TypeScript 6.0.3.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo l’input fornito ({x(A.#}= , quindi esamina visitObjectAssignmentElement e visitAssignmentPattern in tsc/internal/transformers/estransforms/classfields.go, in particolare l’assertion segnalata alla riga 3321. Aggiungi un test di regressione per questo input di destrutturazione malformato e verifica che la compilazione lo segnali o lo gestisca senza causare un panic.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
go, typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
72/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.