uutils / uutils/coreutils

GNU coreutils 9.12: remaining test failures - Sept 2026

Open
#14,705 4 comments 0 reactions 0 assignees View on GitHub

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 range in src/uucore/src/lib/features/format/num_format.rs:434 on a large format precision - a %f precision above u16::MAX is now written and zero-padded without format! - PR #14714 (see also PR #14713)
  • misc/write-errors.sh: numfmt panics on ENOSPC - .unwrap() on a write error in src/uu/numfmt/src/format.rs:976 - numfmt now reports write error: ... and treats it as fatal whatever --invalid says (the test itself still fails on the other utilities) - PR #14715
  • shuf/shuf.sh: panic could not initialize ThreadRng: Function not implemented when getrandom is made to fail

FAILED Tests

  • cat/cat-distinct-err.sh (new): read and write errors must be distinguished (cat: write error: ... vs cat: -: ...) - 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: cut must use bounded memory (intermittent)
  • date/date.pl: comprehensive date parsing
  • date/date-debug.sh: date --debug output
  • 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: dd and --, plus the strace-injected error paths
  • dd/nocache.sh: dd ... nocache on a pipe wrongly reports failed to discard cache: Illegal seek
  • df/df-output.sh: df -m --output=size - -m is rejected when combined with --output
  • du/block-size.sh (new): du --block-size / BLOCK_SIZE must print the unit suffix (98KiB, not 98)
  • du/max-depth.sh: du --max-depth=-1 must give du: invalid maximum depth '-1', not a clap error - PR #14709
  • env/env-signal-handler.sh: env --default-signal=PIPE
  • fold/fold.pl: fold -w0 error text (Numerical result out of range vs Result too large), the overflow case used the wrong errno text too - PR #14706
  • head/quote-headers.sh (new): head must 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_COLORS diagnostic must not be prefixed with warning: - PR #14708
  • ls/ls-time.sh: ls -l time style must follow the locale (Jan 15 1998 vs ISO)
  • ls/m-option.sh: ls -m line 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/*.c and greps our --help for each. Besides uname -p/-i and wc --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 through util/gnu-patches/ - PR #14717
  • misc/io-errors.sh: programs diagnose write errors (intermittent)
  • misc/just-created.sh (new): cp/mv/install must not overwrite a just-created file - PR #14724 (install)
  • misc/printenv.sh: printenv must honour QUOTING_STYLE
  • misc/read-errors.sh: programs diagnose read errors
  • misc/responsive.sh: programs stay responsive to input
  • misc/stdbuf.sh: stdbuf line/block buffering (intermittent)
  • misc/traversal-missing.sh (new): traversal races must be ignored (chmod reports Permission denied where 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, and cut -b1- /dev/zero aborts on a 16MiB allocation
  • od/od.pl: od quotes bad -j/-N arguments as $'a\t' instead of 'a\t'
  • pr/bounded-memory.sh: pr on files larger than memory (intermittent)
  • pr/options.sh (new): pr numeric 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 pr page-formatting tests
  • ptx/ptx.pl: invalid -S regex must not print a multi-line regex crate error
  • ptx/word-regex-loop.sh (new): a nullable --word-regexp must not produce extra output - PR #14722
  • seq/seq-precision.sh: large format precision (panic, see above) - PR #14714
  • shred/fifo.sh (new): shred on a FIFO - invalid file type / failed to open for writing diagnostics
  • shred/shred-remove.sh: shred --remove renaming in an unwritable directory
  • shuf/shuf.sh: RNG failure handling (panic, see above) and --input-range with operands
  • sort/sort.pl: sort --parallel invalid 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 --format with %q-style quoting escapes
  • stat/stat-nanoseconds.sh: %:X, %:Y, ... nanosecond format strings
  • tail/debug.sh: tail --debug output
  • tail/follow-name.sh: --follow=name must not imply --retry (intermittent)
  • tail/follow-symlink.sh (new): tail -f on 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 -F must not leak inotify resources
  • tail/pid-pipe.sh: tail --pid=PID fifo exits responsively (intermittent)
  • tail/pipe-f.sh: tail -f must 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): tail must quote file names in headers - head and tail now shell-escape the name (including 'standard input') - PR #14710
  • tail/symlink.sh: symlink tracking (intermittent)
  • tee/short-write.sh (new): tee must handle a short write (writes the whole buffer again)
  • test/test.pl: test N -eq M exit statuses for some operands
  • unexpand/unexpand.pl: tab stop is too large vs tab stop value is too large - PR #14707
  • wc/wc.pl: wc -c -m on multibyte input reports the wrong count

ERROR Tests

  • env/env.sh, env/env0-from.sh: env --debug must 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: id must fail for processes with zero UIDs
  • install/stdin.sh (new): install reading 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-file prompts, mv -f does not
  • sort/sort-locale.sh: locale-aware sort ordering
  • stty/bad-speed.sh, stty/stty.sh, stty/stty-invalid.sh, stty/stty-pairs.sh, stty/stty-row-col.sh: stty settings

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): printenv with a corrupted environ
  • 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): dd must stop copying when ftruncate/fstat fail

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.