xargs: -d '\0' is rejected, and octal escapes need a leading 0

Abierto Apto para principiantes
#925 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
75/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
cli

Línea de trabajo

Empieza por parse_delimiter en src/xargs/mod.rs y la prueba test_delimiter_parsing mencionada en el issue. Compara el análisis de las secuencias de escape con los ejemplos de GNU incluidos en el texto y luego ejecuta las pruebas de análisis de delimitadores. El trabajo estará terminado cuando las secuencias de escape aceptadas y rechazadas que se enumeran se comporten como se describe y la prueba existente refleje el comportamiento previsto de \0.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

$ printf 'a\0b' | xargs -d '\0' echo
Error: error: invalid value '\0' for '--delimiter <delimiter>': Invalid octal sequence: cannot parse integer from empty string
$ printf 'a\0b' | /usr/bin/xargs -d '\0' echo    # GNU findutils 4.10.0
a b
$ printf 'a:b' | xargs -d '\72' echo
Error: error: invalid value '\72' for '--delimiter <delimiter>': Invalid escape sequence: \72

GNU's manual says -d takes "an octal or hexadecimal escape code ... understood as for the printf command", and GNU xargs accepts \0, \72, \072, \101 and \0101. It rejects \400, \8 and \09.

In parse_delimiter (src/xargs/mod.rs:914), any escape that starts with 0 goes to the octal branch with the 0 removed, so \0 parses an empty string; the "0" => Ok(b'\0') arm below it never runs. Octal without a leading 0 isn't handled at all.

test_delimiter_parsing asserts parse_delimiter("\\0").is_err(), so matching GNU means changing that line. I have a fix that parses \ followed by octal digits as one octal value, with tests for the cases above; happy to open a PR if you want GNU's behaviour here.

uutils findutils main 505421d.

Lenguaje dominante
Rust
Estrellas
653
Forks
115
Merge medio
1 d 4 h
PR fusionados (30 d)
27

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 uutils/findutils

Todos los issues de uutils/findutils

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.