Skip to content

GNU coreutils 9.12: remaining test failures - Sept 2026 #14705

Description

@sylvestre

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


FAILED Tests

  • cat/cat-distinct-err.sh (new): read and write errors must be distinguished (cat: write error: ... vs cat: -: ...) - 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
  • 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: 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 - PR df: support -m with --output #14742
  • 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 du: reject a negative --max-depth like GNU #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 fold: report ERANGE like GNU for out-of-range column counts #14706
  • head/quote-headers.sh (new): head must 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_COLORS diagnostic must not be prefixed with warning: - PR ls: diagnose an unparsable LS_COLORS as an error, not a warning #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 - 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/*.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 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/install must not overwrite a just-created file - PR install: do not overwrite just-created files #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 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, 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 uucore: do not panic on a %f precision above the formatter limit #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 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): 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 - PR shuf: don't panic when getrandom failed (tests/shuf/shuf.sh) #14744
  • 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 head, tail: quote file names in the '==> name <==' headers #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 head, tail: quote file names in the '==> name <==' headers #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 unexpand: match GNU wording for a too-large tab stop #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 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): dd must stop copying when ftruncate/fstat fail

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions