Repository navigation
GNU coreutils 9.12: remaining test failures - Sept 2026 #14705
Description
This catalogues the remaining GNU coreutils 9.12 test-suite failures so
they can be tracked and worked on individually. It replaces #13841, with the
entries fixed in the meantime removed and the new 9.12 tests added.
Run on main (0.13.0, 3ef4277), GNU coreutils 9.12, full make check then
every failure re-run serially to weed out load-induced flakes:
719 tests, 571 PASS, 63 FAIL, 5 ERROR, 78 SKIP.
Several tests are new in 9.12 (marked (new)) and several older ones were
tightened upstream, so this list is noticeably longer than the 9.11 one.
Status: entries carrying a PR number have a fix under review; each was
verified with a Rust test plus a re-run of the GNU test. Together they turn 12
of the failures below into passes.
Crashes (panics) - highest priority
- printf/printf.sh and seq/seq-precision.sh: panic
Formatting argument out of rangeinsrc/uucore/src/lib/features/format/num_format.rs:434on a large format precision - a%fprecision aboveu16::MAXis now written and zero-padded withoutformat!- PR uucore: do not panic on a %f precision above the formatter limit #14714 (see also PR printf: avoid panic on large float precision #14713) - misc/write-errors.sh:
numfmtpanics on ENOSPC -.unwrap()on a write error insrc/uu/numfmt/src/format.rs:976-numfmtnow reportswrite error: ...and treats it as fatal whatever--invalidsays (the test itself still fails on the other utilities) - PR numfmt: diagnose write errors instead of panicking #14715 - shuf/shuf.sh: panic
could not initialize ThreadRng: Function not implementedwhengetrandomis made to fail
FAILED Tests
- cat/cat-distinct-err.sh (new): read and write errors must be distinguished (
cat: write error: ...vscat: -: ...) - PR cat: distinguish read and write errors #14721 - comm/dash-dash.sh (new):
comm - -reading stdin twice - it currently hangs (the test times out), it is not just a wrong result - PR comm: avoid deadlock when both inputs use stdin #15249 - csplit/csplit.sh:
csplit '//'is rejected instead of being treated as an empty pattern - empty//and%%accepted, plus the split in progress is reported before a read error - PR csplit: accept an empty regex and report the split in progress on error #14716 - cut/bounded-memory.sh:
cutmust use bounded memory (intermittent) - date/date.pl: comprehensive date parsing - PR date: expand GNU-compatible parsing and formatting #15111
- date/date-debug.sh:
date --debugoutput - date/date-locale-hour.sh: 12- vs 24-hour clock per locale (intermittent)
- date/date-tz.sh: a time that does not exist in the TZ (DST spring-forward) must be rejected - PR date: expand GNU-compatible parsing and formatting #15111
- dd/misc.sh:
ddand--, plus thestrace-injected error paths - dd/nocache.sh:
dd ... nocacheon a pipe wrongly reportsfailed to discard cache: Illegal seek - df/df-output.sh:
df -m --output=size--mis rejected when combined with--output- PR df: support -m with --output #14742 - du/block-size.sh (new):
du --block-size/BLOCK_SIZEmust print the unit suffix (98KiB, not98) - du/max-depth.sh:
du --max-depth=-1must givedu: invalid maximum depth '-1', not a clap error - PR du: reject a negative --max-depth like GNU #14709 - env/env-signal-handler.sh:
env --default-signal=PIPE - fold/fold.pl:
fold -w0error text (Numerical result out of rangevsResult too large), the overflow case used the wrong errno text too - PR fold: report ERANGE like GNU for out-of-range column counts #14706 - head/quote-headers.sh (new):
headmust quote file names in==> ... <==headers - PR head, tail: quote file names in the '==> name <==' headers #14710 - join/join.pl: error text and exit status on invalid usage
- ls/color-symlink-target.sh (new): unparsable
LS_COLORSdiagnostic must not be prefixed withwarning:- PR ls: diagnose an unparsable LS_COLORS as an error, not a warning #14708 - ls/ls-time.sh:
ls -ltime style must follow the locale (Jan 15 1998vs ISO) - ls/m-option.sh:
ls -mline wrapping - PR ls: fix -m line wrapping and quoting #14743 - misc/close-stdin.sh (new): programs run with stdin initially closed must diagnose EBADF
- misc/getopt_vs_usage.sh: the test reads the option tables out of GNU's own
src/*.cand greps our--helpfor each. Besidesuname -p/-iandwc --debug(genuine gaps, fix ready), it reports options we do not implement at all:cp --keep-directory-symlink,env --env0-from,install --debug,ln -F/--directory,mv --no-copy,pr -c/-v/--output-tabs/--show-control-chars/--show-nonprinting,ptx --format,split -u/--unbuffered,stat --cached. Of little value for us, so it is being skipped throughutil/gnu-patches/- PR GnuTests: skip getopt_vs_usage.sh, of little value for us #14717 - misc/io-errors.sh: programs diagnose write errors (intermittent)
- misc/just-created.sh (new):
cp/mv/installmust not overwrite a just-created file - PR install: do not overwrite just-created files #14724 (install) - misc/printenv.sh:
printenvmust honourQUOTING_STYLE- PR printenv: HonorQUOTING_STYLEenvironment variable #14857 - misc/read-errors.sh: programs diagnose read errors
- misc/responsive.sh: programs stay responsive to input
- misc/stdbuf.sh:
stdbufline/block buffering (intermittent) - misc/traversal-missing.sh (new): traversal races must be ignored (
chmodreportsPermission deniedwhere GNU reports the race) - misc/usage_vs_refs.sh - PR Removing usage_vs_refs from comparison gnu test suite #10896: every supported option has references in docs
- misc/warning-errors.sh: failure to write warnings is handled gracefully
- misc/write-errors.sh: programs promptly diagnose write errors -
numfmt's panic is fixed by PR numfmt: diagnose write errors instead of panicking #14715, but ~40 utilities still fail to diagnose EBADF/ENOSPC, andcut -b1- /dev/zeroaborts on a 16MiB allocation - od/od.pl:
odquotes bad-j/-Narguments as$'a\t'instead of'a\t'- PR od: use standard single quotes for invalid option argument diagnostics #14759 - pr/bounded-memory.sh:
pron files larger than memory (intermittent) - pr/options.sh (new):
prnumeric option diagnostics (invalid page range '0','-l PAGE_LENGTH' invalid number of lines, ...) - printf/printf.sh: large format precision (panic, see above) - PR uucore: do not panic on a %f precision above the formatter limit #14714
- pr/pr-tests.pl: comprehensive
prpage-formatting tests - ptx/ptx.pl: invalid
-Sregex must not print a multi-lineregexcrate error - ptx/word-regex-loop.sh (new): a nullable
--word-regexpmust not produce extra output - PR ptx: skip empty word-regexp matches #14722 - seq/seq-precision.sh: large format precision (panic, see above) - PR uucore: do not panic on a %f precision above the formatter limit #14714
- shred/fifo.sh (new):
shredon a FIFO -invalid file type/failed to open for writingdiagnostics - shred/shred-remove.sh:
shred --removerenaming in an unwritable directory - shuf/shuf.sh: RNG failure handling (panic, see above) and
--input-rangewith operands - PR shuf: don't panic when getrandom failed (tests/shuf/shuf.sh) #14744 - sort/sort.pl:
sort --parallelinvalid argument diagnostics - sort/sort-buffer-size.sh (new): buffer sizing for streaming input
- sort/sort-compress-proc.sh: compression subprocesses
- sort/sort-stale-thread-mem.sh: stale thread memory (intermittent)
- split/split-io-err.sh: I/O errors via
/dev/full- PR split: avoid opening output for empty input #14973 - stat/stat-fmt.sh:
stat --formatwith%q-style quoting escapes - stat/stat-nanoseconds.sh:
%:X,%:Y, ... nanosecond format strings - tail/debug.sh:
tail --debugoutput - tail/follow-name.sh:
--follow=namemust not imply--retry(intermittent) - tail/follow-symlink.sh (new):
tail -fon a symlink must keep following the target - tail/inotify-dir-recreate.sh: switch to polling when the directory is recreated (intermittent)
- tail/inotify-rotate-resources.sh:
tail -Fmust not leak inotify resources - tail/pid-pipe.sh:
tail --pid=PID fifoexits responsively (intermittent) - tail/pipe-f.sh:
tail -fmust not hang on a pipe (intermittent) - it expects==> 'standard input' <==, so the header-quoting fix makes it pass - PR head, tail: quote file names in the '==> name <==' headers #14710 - tail/quote-headers.sh (new):
tailmust quote file names in headers -headandtailnow shell-escape the name (including'standard input') - PR head, tail: quote file names in the '==> name <==' headers #14710 - tail/symlink.sh: symlink tracking (intermittent)
- tee/short-write.sh (new):
teemust handle a short write (writes the whole buffer again) - test/test.pl:
- Support for
-l STRING(evaluates to the string length) is missing -
-oand-ashould be considered literals when arguments of another binary operator
- Support for
- unexpand/unexpand.pl:
tab stop is too largevstab stop value is too large- PR unexpand: match GNU wording for a too-large tab stop #14707 - wc/wc.pl:
wc -c -mon multibyte input reports the wrong count
ERROR Tests
- env/env.sh, env/env0-from.sh:
env --debugmust quote the executed command (executing: './truetrue') - NOTE: Upstream is working on changing this - env/printenv.sh: (see INCOMPATIBLE -
LD_PRELOAD) - rm/ext3-perf.sh, rm/many-dir-entries-vs-OOM.sh: set-up fails with
Command could not be run: Argument list too long (os error 7)- we should fall back like GNU instead of erroring out
SKIPPED Tests
- dd/nocache_fail.sh: diagnose failure to drop caches
- id/gnu-zero-uids.sh:
idmust fail for processes with zero UIDs - install/stdin.sh (new):
installreading from/dev/stdin - misc/tty-quoting.sh (new): quoting when stdout is a terminal
- mkdir/smack-no-root.sh: SMACK labels for
mkdir/mknod/mkfifo - mv/i-3.sh:
mv file unwritable-fileprompts,mv -fdoes not - sort/sort-locale.sh: locale-aware
sortordering - stty/bad-speed.sh, stty/stty.sh, stty/stty-invalid.sh, stty/stty-pairs.sh, stty/stty-row-col.sh:
sttysettings
The stty/* and a few other entries are skipped because the runner has no
controlling tty (or no SELinux/SMACK/ACL/xattr support), rather than being real
gaps.
INCOMPATIBLE Tests
Tests using LD_PRELOAD or gdb breakpoints cannot be fixed without matching
internal implementation details:
- cp/nfs-removal-race.sh (LD_PRELOAD): NFS client removal race during
cp S D - df/skip-duplicates.sh (LD_PRELOAD): duplicate mount-list entry injection
- env/printenv.sh, misc/printenv.sh (LD_PRELOAD):
printenvwith a corruptedenviron - nproc/nproc-quota.sh (LD_PRELOAD): cgroup-quota injection for
nproc - rm/r-root.sh (LD_PRELOAD + gdb): tries to remove
/recursively - rm/rm-readdir-fail.sh (LD_PRELOAD) - PR rm: overriding the libc call when implementation does not match gnu coreutils exactly #9604: simulates readdir failures
- tail/inotify-race.sh, tail/inotify-race2.sh (gdb): races during the initial read
Several other failures above (cat/cat-distinct-err, dd/fail-ftruncate-fstat,
dd/misc, misc/read-errors, misc/traversal-missing, shred/fifo,
shuf/shuf, tail/debug, tee/short-write) use strace fault injection;
they are not structurally impossible - they fail because our syscall sequence or
our error messages differ.
- dd/fail-ftruncate-fstat.sh (strace):
ddmust stop copying when ftruncate/fstat fail
Activity
sylvestre commentedon Sep 19, 2026
Note: this is our top priority, more than code improvements or refactors!
oech3 commentedon Sep 19, 2026
nproc-quota.sh uses
strace, notLD_PRELOAD.If we use different syscalls at some
stracetests, I'll add them to upstream.ChihweiLHBird commentedon Sep 20, 2026
@sylvestre can I work on
dd/nocache.sh,if they are not claimed by others?df/df-output.sh,ptx/ptx.pl, andod/od.ploech3 commentedon Sep 20, 2026
df-output is done at #14742
QUOTING_STYLE#14941anastygnome commentedon Oct 4, 2026
test.pl is done after #14966
anastygnome commentedon Oct 5, 2026
I have a working version of all date tests. I'm reviewing before making a PR ;)
oech3 commentedon Oct 7, 2026
Ignore dd/nocache_fail.sh . I'll fix the test at upstream.