Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package coreutils for openSUSE:Factory checked in at 2026-09-24 22:55:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/coreutils (Old) and /work/SRC/openSUSE:Factory/.coreutils.new.383539 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "coreutils" Thu Sep 24 22:55:05 2026 rev:176 rq:1379719 version:9.12 Changes: -------- --- /work/SRC/openSUSE:Factory/coreutils/coreutils.changes 2026-09-12 21:15:09.743005876 +0200 +++ /work/SRC/openSUSE:Factory/.coreutils.new.383539/coreutils.changes 2026-09-24 22:55:07.704364292 +0200 @@ -1,0 +2,155 @@ +Tue Sep 22 06:22:22 UTC 2026 - Bernhard Voelker <[email protected]> + +- coreutils-9.12-env-quote-fix.patch: Add post-release upstream patch + to revert env(1) behavior, i.e., only quote when outputting to terminals. +- coreutils-i18n.patch: Sync with Fedora. + * src/linebuffer.h: Remove unnecessary hunk. + Avoid false-positives in French locale: + * tests/Coreutils.pm: Adjust test name length for "-mb" suffix. + * tests/pr/pr-tests.pl: Skip "neg-page" test. + * tests/sort/sort.pl: Skip "invalid-parallel" test. + +------------------------------------------------------------------- +Thu Sep 17 06:33:14 UTC 2026 - Bernhard Voelker <[email protected]> + +- Update to 9.12: + Bug fixes + * 'chcon', 'chgrp', 'chmod', 'chown', 'du', 'ls' which traverse hierarchies with + -R, no longer fail merely because files may be being removed in parallel. + [This bug was present in "the beginning".] + * 'comm - -' no longer closes standard input twice. Previously it would + mistakenly exit with a nonzero status. + [This bug was present in "the beginning".] + * 'cp', 'install', and 'mv' now fall back to a standard copy + if a --reflink=auto clone fails due to EDQUOT, ENOMEM, or ENOSPC. + E.g., with XFS, a clone can exhaust metadata space in an allocation + group, while a standard copy works. + [bug introduced in coreutils-9.2] + * 'cut -d' with multiple multi-byte delimiter options specified + will correctly match the last delimiter specified. + [bug introduced with multi-byte support in coreutils-9.11] + * 'date -d '1-2-3' "+%_D"' no longer propagates flags like _ and - to the year + component of the %D date specifier, keeping consistent component formatting. + [bug introduced in coreutils-8.31] + * 'du --max-depth=N' now exits with a nonzero exit status and an error message + if N is negative. Previously it behaved as if N were zero. + [bug introduced in coreutils-9.4] + * 'factor' avoids a buffer over-read (CWE-126) for certain values. + [bug introduced in coreutils-9.8] + * 'head' and 'tail' now quote names in file headers when needed. + [This bug was present in "the beginning".] + * 'ls --color' no longer reads freed memory when LS_COLORS sets "ln=target" + and later becomes unparsable, e.g., LS_COLORS='ln=target:x'. + [This bug was present in "the beginning".] + * 'mv' now warns when copying extended attributes fails with ENOTSUP, e.g., when + moving files to a file system that does not support them. + [bug introduced in coreutils-7.3] + * 'numfmt', 'printf', and 'seq' on Solaris, no longer output an extraneous e+00 + when using a large precision like "%.5119f". + [This bug was present in "the beginning".] + * 'pinky -l' no longer no longer prints output in the incorrect order when + standard output is fully buffered, e.g., when redirected to a file. + [bug introduced in coreutils-9.10] + * 'pr' now exits gracefully upon exceeding internal accounting limits, + like when processing large tab stops. + [This bug was present in "the beginning".] + * 'ptx -G' no longer loops forever when the output width is smaller than + twice the gap size, as with 'ptx -G -w4', or when a long reference + leaves that little room, as with 'ptx -G -r'. + [This bug was present in "the beginning".] + * 'ptx -W' no longer loops forever with a word regular expression that can + match the empty string, like: echo ab | ptx -W 'a*'. + [This bug was present in "the beginning".] + * 'shred' no longer blocks when opening a FIFO that has no readers. + [This bug was present in "the beginning".] + * 'stty' no longer fails when the system uses speed encodings that + are variations of the requested speed. + [bug introduced in coreutils-9.8] + * 'tee' no longer loops infinitely after writing all output if a write call sets + errno to EAGAIN. + [bug introduced in coreutils-9.11] + * 'tee' no longer treats short writes as errors. + [bug introduced in coreutils-9.11] + * 'test' no longer treats '-a' and '-o' as operators when given as strings to a + binary operator. E.g., 'test -a -a -a' exits successfully instead of exiting + with an error. + [This bug was present in "the beginning".] + * 'truncate --reference=R' no longer hangs when R is a FIFO with no readers. + [bug introduced in coreutils-8.17] + * 'unexpand -t' no longer overflows a heap buffer, for tab values > SIZE_MAX/16, + or with multi-byte blank characters longer than the tab value. + [bugs introduced in coreutils-9.11] + * 'uniq -w' no longer overruns the read buffer in multibyte locales. + [bug introduced in coreutils-9.5] + * 'wc' no longer reads past the end of a lookup table in legacy multibyte + locales like SHIFT-JIS where a single byte can decode to a wide character. + [bug introduced in coreutils-9.5] + * Messages from Gnulib are no longer mistranslated in non-English locales. + [bug introduced in coreutils-9.6] + New Features + * 'env' now supports --env0-from=FILE to read NUL-delimited environment entries + from a file. With -i, entries are preserved exactly, allowing full + round-tripping of environments containing duplicate or nonstandard entries. + * 'stat' and 'tail' now know about the "failfs" and "nullfs" file system types. + stat -f -c%T now reports the file system type, + and tail -f uses inotify for these file systems. + * uname adds the -A,--all-labeled option to label all output, one item per line. + Changes in behavior + * 'env' and 'printenv' now quote printed environment variables honoring the + QUOTING_STYLE environment variable, defaulting to shell-escape style. This + avoids printing arbitrary data to the terminal and allows the output to be + sourced by a POSIX shell. + * 'ls' -w,--width no longer includes '\n' in the width of a line. + I.e., the width or $COLUMNS is interpreted to be an _inclusive_ maximum. + * 'stat' now uses shell quoting when required, to more robustly escape + file names. Previously it only quoted file names with the %N format. + The default quoting honors the QUOTING_STYLE env variable (like %N). + Also %Qn is a newly supported format combination to quote file names, + leaving the existing %n format for when quoting is not desired. + Improvements + * When built with the configure option '--with-wtmpdb', invocations of + 'who /var/log/wtmp' and 'users /var/log/wtmp' use the wtmpdb database + instead of the file /var/log/wtmp. This makes them Y2038-safe. + * 'cut -w' operates more efficiently when extracting the start of a line + in multi-byte locales, giving 4x more throughput with typical input. + * 'df', 'du', 'ls', 'od', 'pr', and 'sort' now escape invalid arguments in error + messages for options expecting an integer. + * 'env -0, and 'printenv -0' now explicitly set binary mode on output + so that no CRLF translation is done e.g., on windows. + * 'install -C' will now avoid updating file metadata when the destination + already has the appropriate ownership and permissions. + * 'basename', 'dirname', 'du', 'readlink', and 'realpath' now quote output in + shell-escape style when standard output is a terminal. The QUOTING_STYLE + environment variable can be used to adjust or disable the quoting. + * 'ls -m' now quotes files names containing commas when appropriate, + so users can better distinguish separating commas. + * 'ls' now replaces newlines in file names if ambiguous with separators. + Previously newlines were protected only when outputting to a terminal. + * 'sort' will now better use available memory and parallel operation + when reading from unknown sized inputs like pipes. + * 'uniq -c' now operates up to 2.5x times faster on systems with unlocked stdio + functions. + Build-related + * 'logname' now builds, where getlogin() is replaced (e.g. with musl), + and systemd libs are being used, by linking the required libraries. + * The multi-call binary built with configure --enable-single-binary is reduced + in size by around 10KB through the more efficient reuse of the 'test' code + by '[', and the 'true' code by 'false'. + * configure no longer accepts the --with-linux-crypto option, which allowed + cksum, md5sum, and sha*sum to use the Linux AF_ALG API. This API will be + deprecated in Linux 7.2 and is less performant than OpenSSL. + * The configure option '--enable-systemd' is renamed to '--with-systemd'. + The option '--enable-systemd' was a misnomer and is now deprecated. + * The 'sort' binary now uses the UAPI Group's .note.dlopen ELF note + to indicate its dependency on libcrypto. +- coreutils.spec (%build): Change configure option from --enable-systemd + to --with-systemd. +- coreutils-tests-misc-tty-eof-avoid-false-failure.patch: + Remove now-obsolete patch. +- coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch, + coreutils-uniq-fix-read-overrun-with-w.patch, + coreutils-unexpand-fix-heap-overflow.patch: + Remove now-upstream patches. +- Refresh all other patches. + +------------------------------------------------------------------- Old: ---- coreutils-9.11.tar.xz coreutils-9.11.tar.xz.sig coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch coreutils-tests-misc-tty-eof-avoid-false-failure.patch coreutils-unexpand-fix-heap-overflow.patch coreutils-uniq-fix-read-overrun-with-w.patch New: ---- coreutils-9.12-env-quote-fix.patch coreutils-9.12.tar.xz coreutils-9.12.tar.xz.sig ----------(Old B)---------- Old: Remove now-obsolete patch. - coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch, coreutils-uniq-fix-read-overrun-with-w.patch, Old: to --with-systemd. - coreutils-tests-misc-tty-eof-avoid-false-failure.patch: Remove now-obsolete patch. Old: coreutils-uniq-fix-read-overrun-with-w.patch, coreutils-unexpand-fix-heap-overflow.patch: Remove now-upstream patches. Old:- coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch, coreutils-uniq-fix-read-overrun-with-w.patch, coreutils-unexpand-fix-heap-overflow.patch: ----------(Old E)---------- ----------(New B)---------- New: - coreutils-9.12-env-quote-fix.patch: Add post-release upstream patch to revert env(1) behavior, i.e., only quote when outputting to terminals. ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ coreutils.spec ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.776409093 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.778409177 +0200 @@ -30,7 +30,7 @@ %global psuffix %{nil} %endif Name: coreutils%{?psuffix} -Version: 9.11 +Version: 9.12 Release: 0 Summary: GNU Core Utilities License: GPL-3.0-or-later @@ -63,15 +63,10 @@ # tests: skip tests/rm/ext3-perf.sh temporarily as it hangs on OBS. Patch810: coreutils-skip-tests-rm-ext3-perf.patch Patch900: coreutils-tests-workaround-make-fdleak.patch -Patch901: coreutils-tests-misc-tty-eof-avoid-false-failure.patch Patch902: coreutils-tests-df-sync-fix-strace.patch - -# Upstream fix for bsc#1265378 -Patch920: coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch -# Upstream security fix for CVE-2026-56391 / bsc#1272698 -Patch922: coreutils-uniq-fix-read-overrun-with-w.patch -# Upstream security fix for CVE-2026-56392 / bsc#1272699 -Patch923: coreutils-unexpand-fix-heap-overflow.patch +# Post-release upstream patch to revert env(1) behavior, i.e., only quote when +# outputting to terminals. +Patch910: coreutils-9.12-env-quote-fix.patch BuildRequires: automake BuildRequires: gmp-devel @@ -187,11 +182,9 @@ %patch -P 810 %patch -P 900 -%patch -P 901 -p 1 -%patch -P 902 -p 1 -%patch -P 920 -p 1 -%patch -P 922 -p 1 -%patch -P 923 -p 1 +%patch -P 902 + +%patch -P 910 # ================================================ %build @@ -208,7 +201,7 @@ --without-gmp \ %endif %if "%{name}" == "coreutils-systemd" - --enable-systemd \ + --with-systemd \ %endif DEFAULT_POSIX2_VERSION=200112 \ alternative=199209 ++++++ coreutils-9.12-env-quote-fix.patch ++++++ >From 782a1e5bc2090212273bb731dceee2cc2a071e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Tue, 15 Sep 2026 20:26:28 +0100 Subject: [PATCH] env,printenv: only quote when outputting to terminals To support albeit non-robust but existing use cases like: env | grep SPARK_JAVA_OPT_ | sort -t_ -k4 -n | sed 's/[^=]*=\(.*\)/\1/g' > java_opts.txt readarray -t SPARK_EXECUTOR_JAVA_OPTS < java_opts.txt ... CMD=("${JAVA_HOME}/bin/java" "${SPARK_EXECUTOR_JAVA_OPTS[@]}" ...) * src/env.c (main): Restrict quoting to terminals. * src/printenv.c (main): Likewise. * tests/env/env.sh: Adjust accordingly. * tests/misc/printenv.sh: Likewise. * doc/coreutils.texi: Likewise. Link: https://github.com/coreutils/coreutils/issues/355 (cherry picked from commit 782a1e5bc2090212273bb731dceee2cc2a071e54) --- doc/coreutils.texi | 16 ++++++---------- src/env.c | 2 +- src/printenv.c | 2 +- tests/env/env.sh | 31 +++++++------------------------ tests/misc/printenv.sh | 40 ++++------------------------------------ 5 files changed, 19 insertions(+), 72 deletions(-) Index: doc/coreutils.texi =================================================================== --- doc/coreutils.texi.orig +++ doc/coreutils.texi @@ -15511,13 +15511,9 @@ The program accepts the following option @end table -If no @var{variable}s are specified, @command{printenv} quotes +If standard output is a terminal @command{printenv} quotes environment variables and their values using the @samp{shell-escape} -style. If @var{variable}s are specified, @command{printenv} only quotes -their values using the @samp{shell-escape} style if standard output is a -terminal. - -The environment variable @env{QUOTING_STYLE} +style by default. The environment variable @env{QUOTING_STYLE} specifies the quoting style. Valid quoting styles are: @quotingStyles @@ -17460,10 +17456,10 @@ If no command name is specified followin specifications, the resulting environment is printed. This is like specifying the @command{printenv} program. -The printed environment variables and their values are quoted using the -@samp{shell-escape} style. The environment variable -@env{QUOTING_STYLE} specifies the quoting style. Valid quoting styles -are: +If standard output is a terminal, the printed environment variables +and their values are quoted using the @samp{shell-escape} style by default. +The environment variable @env{QUOTING_STYLE} specifies the quoting style. +Valid quoting styles are: @quotingStyles For some examples, suppose the environment passed to @command{env} Index: src/env.c =================================================================== --- src/env.c.orig +++ src/env.c @@ -1113,7 +1113,7 @@ main (int argc, char **argv) /* Get the value from QUOTING_STYLE before unsetting environment variables. */ - if (!opt_nul_terminate_output) + if (!opt_nul_terminate_output && isatty (STDOUT_FILENO)) { int qs = getenv_quoting_style (); if (qs < 0) Index: src/printenv.c =================================================================== --- src/printenv.c.orig +++ src/printenv.c @@ -113,7 +113,7 @@ main (int argc, char **argv) bool quote_output = false; idx_t const n_args = argc - optind; - if (!opt_nul_terminate_output && (n_args <= 0 || isatty (STDOUT_FILENO))) + if (!opt_nul_terminate_output && isatty (STDOUT_FILENO)) { int qs = getenv_quoting_style (); if (qs < 0) Index: tests/env/env.sh =================================================================== --- tests/env/env.sh.orig +++ tests/env/env.sh @@ -91,18 +91,14 @@ EOF compare exp out || fail=1 # env shouldn't care what encoding name or value is -cat <<\EOF >exp || framework_failure_ -NON_UTF8_TEST=''$'\240' -EOF +printf 'NON_UTF8_TEST=\240\n' > exp || framework_failure_ env $(printf 'NON_UTF8_TEST=\240') env > all || fail=1 grep '^NON_UTF8_TEST' all | LC_ALL=C sort > out || framework_failure_ compare exp out || fail=1 -cat <<\EOF >exp || framework_failure_ -'NON_UTF8_TEST'$'\240'=1 -EOF +printf 'NON_UTF8_TEST\240=1\n' > exp || framework_failure_ env $(printf 'NON_UTF8_TEST\240=1') env > all || fail=1 -grep "^'NON_UTF8_TEST" all | LC_ALL=C sort > out || framework_failure_ +grep "^NON_UTF8_TEST" all | LC_ALL=C sort > out || framework_failure_ compare exp out || fail=1 # PATH modifications affect exec. @@ -193,29 +189,16 @@ EOF compare err_exp err || fail=1 done -# QUOTING_STYLE affects redirected output. -cat <<\EOF >exp-noargs-literal || framework_failure_ -a b=c d -EOF -cat <<\EOF >exp-noargs-shell || framework_failure_ -'a b'='c d' -EOF -tr "'" '"' <exp-noargs-shell >exp-noargs-c || framework_failure_ -for qs in literal shell c; do +# QUOTING_STYLE does not affect redirected output. +printf '%s\n' 'a b=c d' > exp || framework_failure_ +for qs in literal shell-always invalid; do env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \ env >out-t 2>err || fail=1 grep -vE '^["'"'"']?'\ '(__CF_USER_TEXT_ENCODING|QUOTING_STYLE|(LD_ORIGIN_)?PATH)["'"'"']?=' \ out-t >out || framework_failure_ - compare exp-noargs-$qs out || fail=1 + compare exp out || fail=1 compare /dev/null err || fail=1 done -# Check the behavior with an invalid value for QUOTING_STYLE. -printf 'env: ignoring invalid value of environment variable %s\n' \ - "QUOTING_STYLE: 'invalid'" >exp || framework_failure_ -env QUOTING_STYLE=invalid env >out 2>err || fail=1 -grep '^QUOTING_STYLE=invalid$' out || fail=1 -compare exp err || fail=1 - Exit $fail Index: tests/misc/printenv.sh =================================================================== --- tests/misc/printenv.sh.orig +++ tests/misc/printenv.sh @@ -80,48 +80,16 @@ compare exp out || fail=1 returns_ 1 env a=b=c printenv a=b > out || fail=1 compare /dev/null out || fail=1 -# QUOTING_STYLE affects redirected output. -cat <<\EOF >exp-noargs-literal || framework_failure_ -a b=c d -EOF -cat <<\EOF >exp-arg-literal || framework_failure_ -c d -EOF -cat <<\EOF >exp-args-literal || framework_failure_ -c d -c d -EOF -cat <<\EOF >exp-noargs-shell || framework_failure_ -'a b'='c d' -EOF -cp exp-arg-literal exp-arg-shell && -cp exp-args-literal exp-args-shell || framework_failure_ -for t in noargs arg args; do - tr "'" '"' <exp-$t-shell >exp-$t-c || framework_failure_ -done -for qs in literal shell c; do +# QUOTING_STYLE does not affect redirected output. +printf '%s\n' 'a b=c d' > exp || framework_failure_ +for qs in literal shell-always invalid; do env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \ printenv >out-t 2>err || fail=1 grep -vE '^["'"'"']?'\ '(__CF_USER_TEXT_ENCODING|QUOTING_STYLE|(LD_ORIGIN_)?PATH)["'"'"']?=' \ out-t >out || framework_failure_ - compare exp-noargs-$qs out || fail=1 - compare /dev/null err || fail=1 - env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \ - printenv 'a b' >out 2>err || fail=1 - compare exp-arg-$qs out || fail=1 - compare /dev/null err || fail=1 - env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \ - printenv 'a b' 'a b' >out 2>err || fail=1 - compare exp-args-$qs out || fail=1 + compare exp out || fail=1 compare /dev/null err || fail=1 done -# Check the behavior with an invalid value for QUOTING_STYLE. -printf 'printenv: ignoring invalid value of environment variable %s\n' \ - "QUOTING_STYLE: 'invalid'" >exp || framework_failure_ -env QUOTING_STYLE=invalid printenv >out 2>err || fail=1 -grep '^QUOTING_STYLE=invalid$' out || fail=1 -compare exp err || fail=1 - Exit $fail ++++++ coreutils-9.11.tar.xz -> coreutils-9.12.tar.xz ++++++ /work/SRC/openSUSE:Factory/coreutils/coreutils-9.11.tar.xz /work/SRC/openSUSE:Factory/.coreutils.new.383539/coreutils-9.12.tar.xz differ: char 15, line 1 ++++++ coreutils-disable_tests.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.876413272 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.878413356 +0200 @@ -6,7 +6,7 @@ =================================================================== --- gnulib-tests/gnulib.mk.orig +++ gnulib-tests/gnulib.mk -@@ -1580,10 +1580,10 @@ EXTRA_DIST += test-getloadavg.c signatur +@@ -1604,10 +1604,10 @@ EXTRA_DIST += test-getloadavg.c signatur ## begin gnulib module getlogin-tests ++++++ coreutils-i18n.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.889413816 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.892413941 +0200 @@ -4,50 +4,17 @@ Subject: [PATCH] coreutils-i18n.patch --- - lib/linebuffer.h | 8 src/pr.c | 443 ++++++++++++++++++++++-- src/sort.c | 791 +++++++++++++++++++++++++++++++++++++++++--- + tests/Coreutils.pm | 3 tests/i18n/sort.sh | 29 + tests/local.mk | 2 tests/misc/sort-mb-tests.sh | 45 ++ tests/pr/pr-tests.pl | 49 ++ tests/sort/sort-merge.pl | 42 ++ tests/sort/sort.pl | 40 ++ - 9 files changed, 1355 insertions(+), 94 deletions(-) - create mode 100644 lib/mbfile.c - create mode 100644 lib/mbfile.h - create mode 100644 m4/mbfile.m4 - create mode 100755 tests/expand/mb.sh - create mode 100755 tests/i18n/sort.sh - create mode 100755 tests/misc/sort-mb-tests.sh - create mode 100755 tests/unexpand/mb.sh + 9 files changed, 1350 insertions(+), 94 deletions(-) -Index: lib/linebuffer.h -=================================================================== ---- lib/linebuffer.h.orig -+++ lib/linebuffer.h -@@ -27,6 +27,11 @@ extern "C" { - #endif - - -+/* Get mbstate_t. */ -+# if HAVE_WCHAR_H -+# include <wchar.h> -+# endif -+ - /* A 'struct linebuffer' holds a line of text. */ - - struct linebuffer -@@ -34,6 +39,9 @@ struct linebuffer - idx_t size; /* Allocated. */ - idx_t length; /* Used. */ - char *buffer; -+# if HAVE_WCHAR_H -+ mbstate_t state; -+# endif - }; - - /* Initialize linebuffer LINEBUFFER for use. */ Index: src/pr.c =================================================================== --- src/pr.c.orig @@ -654,7 +621,7 @@ { width = TAB_WIDTH (chars_per_c, input_position); -@@ -2737,6 +2936,164 @@ char_to_clump (char c) +@@ -2740,6 +2939,164 @@ char_to_clump (char c) return chars; } @@ -880,7 +847,7 @@ /* The kind of blanks for '-b' to skip in various options. */ enum blanktype { bl_start, bl_end, bl_both }; -@@ -333,13 +367,11 @@ static bool stable; +@@ -343,13 +377,11 @@ static bool stable; /* An int value outside char range. */ enum { NON_CHAR = CHAR_MAX + 1 }; @@ -897,7 +864,7 @@ /* Flag to remove consecutive duplicate lines from the output. Only the last of a sequence of equal lines will be output. */ -@@ -375,6 +407,46 @@ struct tempnode +@@ -385,6 +417,46 @@ struct tempnode static struct tempnode *volatile temphead; static struct tempnode *volatile *temptail = &temphead; @@ -944,7 +911,7 @@ /* Clean up any remaining temporary files. */ static void -@@ -1382,7 +1454,7 @@ zaptemp (char const *name) +@@ -1392,7 +1464,7 @@ zaptemp (char const *name) free (node); } @@ -953,7 +920,7 @@ static int struct_month_cmp (void const *m1, void const *m2) -@@ -1397,7 +1469,7 @@ struct_month_cmp (void const *m1, void c +@@ -1407,7 +1479,7 @@ struct_month_cmp (void const *m1, void c /* Initialize the character class tables. */ static void @@ -962,7 +929,7 @@ { for (size_t i = 0; i < UCHAR_LIM; ++i) { -@@ -1407,7 +1479,7 @@ inittables (void) +@@ -1417,7 +1489,7 @@ inittables (void) fold_toupper[i] = toupper (i); } @@ -971,7 +938,7 @@ /* If we're not in the "C" locale, read different names for months. */ if (hard_LC_TIME) { -@@ -1487,6 +1559,84 @@ specify_nmerge (int oi, char c, char con +@@ -1497,6 +1569,84 @@ specify_nmerge (int oi, char c, char con xstrtol_fatal (e, oi, c, long_options, s); } @@ -1056,7 +1023,7 @@ /* Specify the amount of main memory to use when sorting. */ static void specify_sort_size (int oi, char c, char const *s) -@@ -1713,7 +1863,7 @@ buffer_linelim (struct buffer const *buf +@@ -1860,7 +2010,7 @@ maybe_growbuf (struct buffer *buf, struc by KEY in LINE. */ static char * @@ -1065,7 +1032,7 @@ { char *ptr = line->text, *lim = ptr + line->length - 1; size_t sword = key->sword; -@@ -1722,10 +1872,10 @@ begfield (struct line const *line, struc +@@ -1869,10 +2019,10 @@ begfield (struct line const *line, struc /* The leading field separator itself is included in a field when -t is absent. */ @@ -1078,7 +1045,7 @@ ptr = sep ? sep : lim; if (ptr < lim) ++ptr; -@@ -1755,12 +1905,71 @@ begfield (struct line const *line, struc +@@ -1902,12 +2052,71 @@ begfield (struct line const *line, struc return ptr; } @@ -1151,7 +1118,7 @@ { char *ptr = line->text, *lim = ptr + line->length - 1; size_t eword = key->eword, echar = key->echar; -@@ -1775,10 +1984,10 @@ limfield (struct line const *line, struc +@@ -1922,10 +2131,10 @@ limfield (struct line const *line, struc 'beginning' is the first character following the delimiting TAB. Otherwise, leave PTR pointing at the first 'blank' character after the preceding field. */ @@ -1164,7 +1131,7 @@ ptr = sep ? sep : lim; if (ptr < lim && (eword || echar)) ++ptr; -@@ -1824,10 +2033,10 @@ limfield (struct line const *line, struc +@@ -1971,10 +2180,10 @@ limfield (struct line const *line, struc */ /* Make LIM point to the end of (one byte past) the current field. */ @@ -1177,7 +1144,7 @@ if (newlim) lim = newlim; } -@@ -1862,6 +2071,130 @@ limfield (struct line const *line, struc +@@ -2009,6 +2218,130 @@ limfield (struct line const *line, struc return ptr; } @@ -1308,7 +1275,7 @@ /* Fill BUF reading from FP, moving buf->left bytes from the end of buf->buf to the beginning first. If EOF is reached and the file wasn't terminated by a newline, supply one. Set up BUF's line -@@ -1948,8 +2281,22 @@ fillbuf (struct buffer *buf, FILE *fp, c +@@ -2096,8 +2429,22 @@ fillbuf (struct buffer *buf, FILE *fp, c else { if (key->skipsblanks) @@ -1333,7 +1300,7 @@ line->keybeg = line_start; } } -@@ -2087,12 +2434,10 @@ find_unit_order (char const *number) +@@ -2237,12 +2584,10 @@ find_unit_order (char const *number) ATTRIBUTE_PURE static int @@ -1349,7 +1316,7 @@ int diff = find_unit_order (a) - find_unit_order (b); return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep)); -@@ -2104,7 +2449,7 @@ human_numcompare (char const *a, char co +@@ -2254,7 +2599,7 @@ human_numcompare (char const *a, char co ATTRIBUTE_PURE static int @@ -1358,7 +1325,7 @@ { while (blanks[to_uchar (*a)]) a++; -@@ -2114,6 +2459,25 @@ numcompare (char const *a, char const *b +@@ -2264,6 +2609,25 @@ numcompare (char const *a, char const *b return strnumcmp (a, b, decimal_point, thousands_sep); } @@ -1384,7 +1351,7 @@ static int nan_compare (long double a, long double b) { -@@ -2155,7 +2519,7 @@ general_numcompare (char const *sa, char +@@ -2305,7 +2669,7 @@ general_numcompare (char const *sa, char Return 0 if the name in S is not recognized. */ static int @@ -1393,7 +1360,7 @@ { size_t lo = 0; size_t hi = MONTHS_PER_YEAR; -@@ -2494,15 +2858,14 @@ debug_key (struct line const *line, stru +@@ -2652,15 +3016,14 @@ debug_key (struct line const *line, stru char saved = *lim; *lim = '\0'; @@ -1411,7 +1378,7 @@ else if (key->general_numeric) ignore_value (strtold (beg, &tighter_lim)); else if (key->numeric || key->human_numeric) -@@ -2647,7 +3010,7 @@ key_warnings (struct keyfield const *gke +@@ -2805,7 +3168,7 @@ key_warnings (struct keyfield const *gke /* Warn about significant leading blanks. */ bool implicit_skip = key_numeric (key) || key->month; bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */ @@ -1420,7 +1387,7 @@ && ((!key->skipsblanks && !implicit_skip) || (!key->skipsblanks && key->schar) || (!key->skipeblanks && key->echar))) -@@ -2695,9 +3058,9 @@ key_warnings (struct keyfield const *gke +@@ -2853,9 +3216,9 @@ key_warnings (struct keyfield const *gke bool number_locale_warned = false; if (basic_numeric_field_span) { @@ -1433,7 +1400,7 @@ { error (0, 0, _("field separator %s is treated as a " -@@ -2708,9 +3071,9 @@ key_warnings (struct keyfield const *gke +@@ -2866,9 +3229,9 @@ key_warnings (struct keyfield const *gke } if (basic_numeric_field_span || general_numeric_field_span) { @@ -1446,7 +1413,7 @@ { error (0, 0, _("field separator %s is treated as a " -@@ -2718,19 +3081,19 @@ key_warnings (struct keyfield const *gke +@@ -2876,19 +3239,19 @@ key_warnings (struct keyfield const *gke quote (((char []) {decimal_point, 0}))); number_locale_warned = true; } @@ -1470,7 +1437,7 @@ } } -@@ -2782,11 +3145,87 @@ diff_reversed (int diff, bool reversed) +@@ -2940,11 +3303,87 @@ diff_reversed (int diff, bool reversed) return reversed ? _GL_CMP (0, diff) : diff; } @@ -1559,7 +1526,7 @@ { struct keyfield *key = keylist; -@@ -2867,7 +3306,7 @@ keycompare (struct line const *a, struct +@@ -3025,7 +3464,7 @@ keycompare (struct line const *a, struct else if (key->human_numeric) diff = human_numcompare (ta, tb); else if (key->month) @@ -1568,7 +1535,7 @@ else if (key->random) diff = compare_random (ta, tlena, tb, tlenb); else if (key->version) -@@ -2977,6 +3416,211 @@ keycompare (struct line const *a, struct +@@ -3135,6 +3574,211 @@ keycompare (struct line const *a, struct return diff_reversed (diff, key->reverse); } @@ -1780,7 +1747,7 @@ /* Compare two lines A and B, returning negative, zero, or positive depending on whether A compares less than, equal to, or greater than B. */ -@@ -3004,7 +3648,7 @@ compare (struct line const *a, struct li +@@ -3162,7 +3806,7 @@ compare (struct line const *a, struct li diff = - NONZERO (blen); else if (blen == 0) diff = 1; @@ -1789,7 +1756,7 @@ { /* xmemcoll0 is a performance enhancement as it will not unconditionally write '\0' after the -@@ -4382,6 +5026,7 @@ set_ordering (char const *s, struct keyf +@@ -4547,6 +5191,7 @@ set_ordering (char const *s, struct keyf break; case 'f': key->translate = fold_toupper; @@ -1797,7 +1764,7 @@ break; case 'g': key->general_numeric = true; -@@ -4461,7 +5106,7 @@ main (int argc, char **argv) +@@ -4626,7 +5271,7 @@ main (int argc, char **argv) initialize_exit_failure (SORT_FAILURE); hard_LC_COLLATE = hard_locale (LC_COLLATE); @@ -1806,7 +1773,7 @@ hard_LC_TIME = hard_locale (LC_TIME); #endif -@@ -4484,6 +5129,29 @@ main (int argc, char **argv) +@@ -4649,6 +5294,29 @@ main (int argc, char **argv) thousands_sep = NON_CHAR; } @@ -1836,7 +1803,7 @@ inittables (); { -@@ -4729,13 +5397,34 @@ main (int argc, char **argv) +@@ -4894,13 +5562,34 @@ main (int argc, char **argv) case 't': { @@ -1875,7 +1842,7 @@ else { /* Provoke with 'sort -txx'. Complain about -@@ -4746,9 +5435,11 @@ main (int argc, char **argv) +@@ -4911,9 +5600,11 @@ main (int argc, char **argv) quote (optarg)); } } @@ -1889,6 +1856,20 @@ } break; +Index: tests/Coreutils.pm +=================================================================== +--- tests/Coreutils.pm.orig ++++ tests/Coreutils.pm +@@ -273,6 +273,9 @@ sub run_tests ($$$$$) + # Yes, this is an arbitrary limit. If it causes trouble, + # consider removing it. + my $max = 30; ++ # The downstream i18n multi-byte tests have a "-mb" suffix. ++ # Therefore add 3 to the maximum test name length. ++ $max += 3; + if ($max < length $test_name) + { + warn "$program_name: $test_name: test name is too long (> $max)\n"; Index: tests/i18n/sort.sh =================================================================== --- /dev/null @@ -1927,7 +1908,7 @@ =================================================================== --- tests/local.mk.orig +++ tests/local.mk -@@ -435,6 +435,8 @@ all_tests = \ +@@ -456,6 +456,8 @@ all_tests = \ tests/sort/sort-field-limit.sh \ tests/sort/sort-files0-from.pl \ tests/sort/sort-float.sh \ @@ -2036,7 +2017,7 @@ + push @$t, $sub; + } + #temporarily skip some failing tests -+ next if ($test_name =~ "col-0" or $test_name =~ "col-inval" or $test_name =~ "asan1"); ++ next if ($test_name =~ "col-0" or $test_name =~ "col-inval" or $test_name =~ "asan1" or $test_name =~ "neg-page"); + push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}]; + } + push @Tests, @new; @@ -2075,8 +2056,8 @@ # three empty files and one that says 'foo' my @inputs = (+(map{{IN=> {"empty$_"=> ''}}}1..3), {IN=> {foo=> "foo\n"}}); -@@ -77,6 +86,39 @@ my @Tests = - {OUT=>$big_input}], +@@ -87,6 +96,39 @@ my @Tests = + {OUT=>$long_lines_in}], ); +# Add _POSIX2_VERSION=199209 to the environment of each test @@ -2136,7 +2117,7 @@ # Since each test is run with a file name and with redirected stdin, # the name in the diagnostic is either the file name or "-". # Normalize each diagnostic to use '-'. -@@ -428,6 +433,38 @@ foreach my $t (@Tests) +@@ -439,6 +444,38 @@ foreach my $t (@Tests) } } @@ -2165,7 +2146,7 @@ + } + #disable several failing tests until investigation, disable all tests with envvars set + next if (grep {ref $_ eq 'HASH' && exists $_->{ENV}} (@new_t)); -+ next if ($test_name =~ "18g" or $test_name =~ "sort-numeric" or $test_name =~ "08[ab]" or $test_name =~ "03[def]" or $test_name =~ "h4" or $test_name =~ "n1" or $test_name =~ "2[01]a"); ++ next if ($test_name =~ "18g" or $test_name =~ "sort-numeric" or $test_name =~ "08[ab]" or $test_name =~ "03[def]" or $test_name =~ "h4" or $test_name =~ "n1" or $test_name =~ "2[01]a" or $test_name =~ "invalid-parallel"); + next if ($test_name =~ "11[ab]"); # avoid FP: expected result differs to MB result due to collation rules. + push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}]; + } @@ -2175,7 +2156,7 @@ @Tests = triple_test \@Tests; # Remember that triple_test creates from each test with exactly one "IN" -@@ -437,6 +474,7 @@ foreach my $t (@Tests) +@@ -448,6 +485,7 @@ foreach my $t (@Tests) # Remove the IN_PIPE version of the "output-is-input" test above. # The others aren't susceptible because they have three inputs each. @Tests = grep {$_->[0] ne 'output-is-input.p'} @Tests; ++++++ coreutils-remove_hostname_documentation.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.910414693 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.913414819 +0200 @@ -31,7 +31,7 @@ * hostid invocation:: Print numeric host identifier * uptime invocation:: Print system uptime and load -@@ -15859,7 +15857,6 @@ information. +@@ -15993,7 +15991,6 @@ information. * arch invocation:: Print machine hardware name. * nproc invocation:: Print the number of processors. * uname invocation:: Print system information. @@ -39,7 +39,7 @@ * hostid invocation:: Print numeric host identifier. * uptime invocation:: Print system uptime and load. @end menu -@@ -16887,34 +16884,6 @@ Print the kernel version. +@@ -17026,34 +17023,6 @@ Print the kernel version. @exitstatus ++++++ coreutils-remove_kill_documentation.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.925415320 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.928415446 +0200 @@ -33,7 +33,7 @@ Delaying * sleep invocation:: Delay for a specified time -@@ -18299,102 +18293,6 @@ timeout -s INT 5s env --ignore-signal=IN +@@ -18462,102 +18456,6 @@ timeout -s INT 5s env --ignore-signal=IN timeout -s INT -k 3s 5s env --ignore-signal=INT sleep 20 @end example ++++++ coreutils-skip-gnulib-test-tls.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.943416072 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.945416156 +0200 @@ -21,7 +21,7 @@ =================================================================== --- gnulib-tests/gnulib.mk.orig +++ gnulib-tests/gnulib.mk -@@ -3851,9 +3851,10 @@ EXTRA_DIST += test-timespec.c macros.h +@@ -3985,9 +3985,10 @@ EXTRA_DIST += test-timespec.c macros.h ## begin gnulib module tls-tests ++++++ coreutils-sysinfo.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.962416867 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.968417117 +0200 @@ -6,7 +6,7 @@ =================================================================== --- src/uname.c.orig +++ src/uname.c -@@ -357,6 +357,36 @@ main (int argc, char **argv) +@@ -379,6 +379,36 @@ main (int argc, char **argv) element = processor; } #endif @@ -41,9 +41,9 @@ +#endif + } if (! (toprint == UINT_MAX && element == unknown)) - print_element (element); + print_element (element, _("Processor")); } -@@ -382,6 +412,18 @@ main (int argc, char **argv) +@@ -404,6 +434,18 @@ main (int argc, char **argv) element = hardware_platform; } #endif @@ -60,6 +60,6 @@ + element = hardware_platform; + } if (! (toprint == UINT_MAX && element == unknown)) - print_element (element); + print_element (element, _("Hardware platform")); } ++++++ coreutils-tests-df-sync-fix-strace.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.982417702 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.985417828 +0200 @@ -2,8 +2,10 @@ tests/df/sync.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) ---- a/tests/df/sync.sh -+++ b/tests/df/sync.sh +Index: tests/df/sync.sh +=================================================================== +--- tests/df/sync.sh.orig ++++ tests/df/sync.sh @@ -22,7 +22,9 @@ print_ver_ df # This test is marked "very expensive" since calling sync() can take a long # time on a busy system. ++++++ coreutils-tests-shorten-extreme-factor-tests.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:08.996418287 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:08.999418413 +0200 @@ -16,7 +16,7 @@ =================================================================== --- tests/local.mk.orig +++ tests/local.mk -@@ -828,13 +828,8 @@ all_tests = \ +@@ -856,13 +856,8 @@ all_tests = \ # See tests/factor/create-test.sh. tf = tests/factor factor_tests = \ ++++++ coreutils-tests-workaround-make-fdleak.patch ++++++ --- /var/tmp/diff_new_pack.fq60oX/_old 2026-09-24 22:55:09.010418873 +0200 +++ /var/tmp/diff_new_pack.fq60oX/_new 2026-09-24 22:55:09.012418956 +0200 @@ -6,7 +6,7 @@ =================================================================== --- tests/init.sh.orig +++ tests/init.sh -@@ -738,6 +738,16 @@ compare () +@@ -739,6 +739,16 @@ compare () } # -----------------------------------------------------------------------------
