arg_value_union panics on zero-arity union tuple case (unchecked type_[0] index)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
Direzione di ricerca
Il panic si trova in arg_value_union in cmd/crates/soroban-spec-tools/src/lib.rs, intorno alle righe 1326-1342, all'interno del ramo depth > 1 dove type_[0] viene indicizzato senza un controllo sulla lunghezza. Confrontalo con la guardia type_.len() == 1 in example_union, vicino alla riga 1517. Per riprodurlo, costruisci una spec con un caso di tupla union di arità zero all'interno di Option<Vec<MyUnion>> ed esegui contract invoke -- --help. È completato quando il caso di arità zero restituisce None invece di andare in panic, con un test che lo copre.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
cmd/crates/soroban-spec-tools/src/lib.rs:1326-1342 indexes type_[0] inside the depth > 1 branch of arg_value_union without a length check. A contract spec whose union TupleV0 case declares an empty type_ (a VecM<ScSpecTypeDef> of length 0, which is valid XDR) causes an out-of-bounds panic while the clap command is being constructed.
Introduced by #1593, which replaced the non-indexing type_.iter().map(...) with a depth guard that indexes directly. The sibling example_union already guards the identical shape with type_.len() == 1 (~line 1517), which confirms the missing check is an oversight.
Reach
The expansion runs for every function during build_clap_command, so contract invoke --id <c> -- --help is sufficient to trigger it; contract deploy --wasm-hash reaches the same code via the constructor path. contract info interface is unaffected. The union must sit at least two type levels deep to enter the depth > 1 branch, e.g. an input typed Option<Vec<MyUnion>>.
Fix
- Add a length check before indexing in
arg_value_union, returningNonefor a zero-arity tuple case, matching thetype_.len() == 1guardexample_unionapplies. This covers all three index sites (:1327,:1338,:1342). - Reject a zero-arity union tuple case during spec decode/verify so every consumer is protected at once rather than each rendering path separately.
- Lingua principale
- Rust
- Stelle
- 128
- Fork
- 147
- Merge medio
- 2g 12h
- PR unite (30g)
- 35
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di stellar/stellar-cli
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
stellar/stellar-cli#2796 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
stellar/stellar-cli#2781 ·
I maintainer di solito rispondono entro 1 giorno
-
Display the full authorization tree before signing auth entriesForse già presa @DeadZen l’ha presa 16 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
stellar/stellar-cli#2779 ·
I maintainer di solito rispondono entro 1 giorno
-
`tx update sequence-number next` fails when the transaction source is a muxed accountForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
stellar/stellar-cli#2774 ·
I maintainer di solito rispondono entro 1 giorno
-
`tx edit` fails on transaction XDR that is wrapped across multiple linesForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
stellar/stellar-cli#2773 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di stellar/stellar-cli
Issue simili
-
good first issue gpu serve
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
I maintainer di solito rispondono entro 1 giorno
-
documentation E-easy good first issue help wanted
Difficoltà 1/5 1-3 ore Idoneità per principianti 91/100
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
charles-hood/DiagramCraft#73 ·
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
ontologyportal/sigma-rs#200 ·
I maintainer di solito rispondono entro 1 giorno