GNU coreutils 9.12: remaining test failures - Sept 2026
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 24.1k
- Forks
- 2k
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 365
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, 3ef4277d5), 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 #14714 (see also PR #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 #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 #14721 - comm/dash-dash.sh (new):
comm - -reading stdin twice - it currently hangs (the test times out), it is not just a wrong result - 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 #14716 - cut/bounded-memory.sh:
cutmust use bounded memory (intermittent) - date/date.pl: comprehensive date parsing
- 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
- 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 - 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 #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 #14706 - head/quote-headers.sh (new):
headmust quote file names in==> ... <==headers - PR #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 #14708 - ls/ls-time.sh:
ls -ltime style must follow the locale (Jan 15 1998vs ISO) - ls/m-option.sh:
ls -mline wrapping - 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 #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 #14724 (install) - misc/printenv.sh:
printenvmust honourQUOTING_STYLE - 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 #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 #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/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 #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 #14722 - seq/seq-precision.sh: large format precision (panic, see above) - PR #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 - 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 - 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 #14710 - tail/quote-headers.sh (new):
tailmust quote file names in headers -headandtailnow shell-escape the name (including'standard input') - PR #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:
test N -eq Mexit statuses for some operands - unexpand/unexpand.pl:
tab stop is too largevstab stop value is too large- PR #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 #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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the mentioned full make check, then choose one independently actionable test such as cat/cat-distinct-err.sh or du/block-size.sh and read its corresponding implementation and test. Done means the selected test passes with the expected GNU-compatible behavior; entries marked incompatible or dependent on upstream work are not suitable starting points.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, shell
- Domain
- cli, operating-systems, testing-qa
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100