Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

arg_value_union panics on zero-arity union tuple case (unchecked type_[0] index)

Abierto Apto para principiantes
#2,806 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
cli

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

bug

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, returning None for a zero-arity tuple case, matching the type_.len() == 1 guard example_union applies. 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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de stellar/stellar-cli

Todos los issues de stellar/stellar-cli

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.