Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Reference cycles can cause infinte loops

Aperta
#336 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
rust

Direzione di ricerca

Inizia eseguendo l’esempio ASL dell’issue e seguendo la risoluzione dei riferimenti in Return (Local3), dove il ciclo causa l’overflow dello stack. Leggi issue #313 per il comportamento correlato dello store. Il lavoro è completo quando i riferimenti ciclici non entrano più in un ciclo infinito né causano un overflow dello stack, con un test di regressione che copra l’esempio fornito.

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

Descrizione

I think this is a low priority for reasons at the end.

The following ASL demonstrates the issue:

DefinitionBlock("", "DSDT", 1, "RSACPI", "Refs", 1) {
    Method(MAIN) {
        Local0 = 1
        Local1 = RefOf(Local0)
        Local2 = RefOf(Local1)
        Local0 = RefOf(Local2)

        // This line doesn't cause an infinite loop, it just stores a reference
        Local3 = Local0

        // The following line causes an infinite loop trying to get the value
        Return (Local3)
    }
}

This actually fails with thread 'main' (19208) has overflowed its stack.

At present it isn't possible to test stores to the cycle (e.g. Local0 = 2 instead of Local3 = Local0), but the fix for issue #313 would unblock this - in that case Stores also cause infinite loops, but without the stack overflow.

Why is this a low priority?

  • Surely no-one would write ASL like this? (insert "right? right?" meme here)
  • uACPI also hangs in this case
  • acpiexec just exits the process with no error messages

So this crate failing is not out line with other implementations (although I didn't test Windows). I think this should be a straightforward fix - just add a loop counter when unwrapping references?

There's a more complex fix - raising errors when trying to create cycles - but IMO it's not worth the extra complexity.

Lingua principale
Rust
Stelle
245
Fork
93
Merge medio
5g 9h
PR unite (30g)
21

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

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.

Altre issue di rust-osdev/acpi

Tutte le issue di rust-osdev/acpi

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.