arg_value_union panics on zero-arity union tuple case (unchecked type_[0] index)
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
Línea de trabajo
El panic está en arg_value_union en cmd/crates/soroban-spec-tools/src/lib.rs, alrededor de las líneas 1326-1342, dentro de la rama depth > 1 donde se indexa type_[0] sin comprobar la longitud. Compáralo con la guarda type_.len() == 1 en example_union, cerca de la línea 1517. Para reproducirlo, construye una spec con un caso de tupla de unión de aridad cero dentro de Option<Vec<MyUnion>> y ejecuta contract invoke -- --help. Se considera terminado cuando el caso de aridad cero devuelve None en lugar de hacer panic, y hay un test que lo cubre.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Rust
- Estrellas
- 128
- Forks
- 147
- Merge medio
- 2 d 12 h
- PR fusionados (30 d)
- 35
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de stellar/stellar-cli
-
contract extend panics on single-change resultMetaXdr (index out of bounds at extend.rs:306)Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
stellar/stellar-cli#2796 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 85/100
stellar/stellar-cli#2781 ·
Los mantenedores suelen responder en 1 día
-
Display the full authorization tree before signing auth entriesPosiblemente ocupada @DeadZen la tomó hace 15 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
stellar/stellar-cli#2779 ·
Los mantenedores suelen responder en 1 día
-
`tx update sequence-number next` fails when the transaction source is a muxed accountQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
stellar/stellar-cli#2774 ·
Los mantenedores suelen responder en 1 día
-
`tx edit` fails on transaction XDR that is wrapped across multiple linesQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
stellar/stellar-cli#2773 ·
Los mantenedores suelen responder en 1 día
Todos los issues de stellar/stellar-cli
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
[Bug] ComponentType classifies 0x8A8A-0xEAEA as GREASE; mls-extensions §7.5 makes them private useAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
The book has a Nix install section that chelis.ch lacks, and it names two of the three systemsAbiertoarea:ecosystem documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Chelis-Lang/chelis#3866 ·
Los mantenedores suelen responder en 1 día
-
[安卓Feature]: 数字键盘左侧符号区域大小优化Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
metasequoiaime/msime#8620 ·
Los mantenedores suelen responder en 1 día
-
agent-detection macos p2 triaged
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día