nl: zero-padded numbering of i64::MIN panics or prints two minus signs
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #16092 di @fixfon — integrata
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 25/100
Direzione di ricerca
Read src/uu/nl/src/nl.rs, especially NumberFormat::format_to, and run the reproduction command in the issue in both debug and release builds. The issue notes that all 72 existing nl integration tests pass; use cargo test --no-default-features --features nl --test tests test_nl:: as a baseline. Done means -n rz prints the minimum value with one minus sign and does not panic.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
nl --number-format=rz mishandles the valid line number -9223372036854775808 (i64::MIN). A release build prints two minus signs and exits successfully; a debug build panics after writing a single -.
Reproduced on Linux x86_64 (Debian 13), with uutils 0.13.0 built from main at 62fcace0def184c550876d81ad1534408767f086. Compared with GNU coreutils 9.12 from the reference package linked in CONTRIBUTING.md; GNU 9.7 gives the same expected result.
From the repository root:
cargo build --release --no-default-features --features nl
export LC_ALL=C LANG=C
printf 'a\nb\n' | target/release/coreutils nl \
--starting-line-number=-9223372036854775808 -n rz -w 1 -s :
Actual output (exit status 0, empty stderr):
--9223372036854775808:a
-9223372036854775807:b
Expected output (GNU 9.12, exit status 0, empty stderr):
-9223372036854775808:a
-9223372036854775807:b
Building without --release and running the same command with target/debug/coreutils instead exits 101, writes only - to stdout, and reports attempt to negate with overflow.
This also happens when numbering reaches the minimum through a decrement:
printf 'a\nb\n' | target/release/coreutils nl \
--starting-line-number=-9223372036854775807 --line-increment=-1 \
-n rz -w 1 -s :
Here the second line gets the extra minus sign. Using -n rn or -n ln with the minimum value works correctly, as does -n rz starting at the adjacent value with the default increment.
The cause is in NumberFormat::format_to: the negative RightZero branch writes -, then calls number.abs(). The absolute value of i64::MIN is not representable as i64. Formatting its unsigned magnitude would avoid this overflow.
All 72 existing nl integration tests pass (cargo test --no-default-features --features nl --test tests test_nl::). The existing minimum-value tests use the default format rather than rz.
I searched open and closed issues and PRs for nl, the minimum value, and overflow/zero-padding reports. The related #15999 concerns parsing separate negative arguments; this reproducer uses the accepted --starting-line-number=... form. #13347 concerns large number widths, whereas this reproducer uses width 1.
- Lingua principale
- Rust
- Stelle
- 24.3k
- Fork
- 2.1k
- Merge medio
- 1g 20h
- PR unite (30g)
- 380
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun 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 uutils/coreutils
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
fold: tab after an 8 KiB buffer flush exceeds the requested widthForse già presa @gibkim l’ha presa 1 giorno fa. ApertaU - fold
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
ls: `--block-size=0` is accepted when `--si` comes laterForse già presa @Logic769 l’ha presa 3 giorni fa. Apertagood first issue U - ls
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
uutils/coreutils#15962 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
B - high priority U - tr
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di uutils/coreutils
Issue simili
-
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 68/100
longbridge/nsh#804 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
devex good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
calcit-lang/calcit#2538 ·
I maintainer di solito rispondono entro 1 giorno