SHA256
1
0
forked from pool/coreutils

Accepting request 521138 from home:berny:branches:Base:System

- Update to 8.28
  (for details see included NEWS file)
- Refresh patches:
  * coreutils-disable_tests.patch
  * coreutils-i18n.patch
  * coreutils-remove_hostname_documentation.patch
  * coreutils-remove_kill_documentation.patch
  * coreutils-skip-gnulib-test-tls.patch
  * coreutils-tests-shorten-extreme-factor-tests.patch
- coreutils.keyring: Update from upstream (Savannah).
- Remote now-upstream patches:
  * coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
  * coreutils-tests-port-to-timezone-2017a.patch

OBS-URL: https://build.opensuse.org/request/show/521138
OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=286
This commit is contained in:
Bernhard Voelker 2017-09-05 12:56:29 +00:00 committed by Git OBS Bridge
parent 029e3f835a
commit 2e7688367b
17 changed files with 175 additions and 407 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8891d349ee87b9ff7870f52b6d9312a9db672d2439d289bc57084771ca21656b
size 5285648

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIcBAABAgAGBQJYwOwaAAoJEN9v2XEwYDfZQrUP/RdXj/ug35e+u+VD1ts9/b8n
7JihJmxngEZQAJECNTMbJ7mNj6DhpMY0Jg/Hwg7zJT28T6QDeS1Iuk3Id4uM5eFa
CgHKAZumntSMTkQdNvnCEFEIqu+L8BtBYGcOaw66wAFNFw3jdJUUs2sOST2r46jR
N7aY9oARKJuHfgTZ2BI2zL0Q+poXM1O0k/U+BScE6c139zJsbg+1uM9kGVtJWPkM
EPLFWkbTgjYnt+qEFrDlWL0YFOS42sgR7P1sVfBC1nAu5lwgzPy62OtGv9WCEBhm
3+PRNZ0KLW8CKp06llG/0bG4QwssWs6p/vPwrRGeAg6pKsRNN1ni27AnDThiPgvz
YbBLgU+EZj1HuibvYArHXNKY2+O5ZC3nYU6bdAffl3TAtrGFA1ncZXGiFD5UgOQ2
V9Q38S41FUEwKGtf9tWGCRTxrb4FQ1CDzJglV9vHKetn4mgH/HpEG/q07k4RNW5d
ikfrS0xFxbqtLjlY3UqvtkrFyVQFY093ozsP7fKsq53JAtEWc3YvXR8UCbliU+gV
5qug0REBQafe9EAyH+oq0dzD2BZ3KtFcjtKI/2UzAf3idcyygsHgcEPQObqI8BfD
NscEMjdFY7+Zh5w2shQlyq4xr2aI2nXCX3+AMcS/6Yfg6W6fBvgIjtmXBrQsbWpV
DBcx50TVDa/ERBX1+FI1
=skPR
-----END PGP SIGNATURE-----

3
coreutils-8.28.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1117b1a16039ddd84d51a9923948307cfa28c2cea03d1a2438742253df0a0c65
size 5252336

16
coreutils-8.28.tar.xz.sig Normal file
View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIcBAABAgAGBQJZqhkfAAoJEN9v2XEwYDfZZEQP/REePQxk2OXPSRSyYSaazIeP
gDno1D4tcHXHhvl210ouOEvCGux6tJtHmCQ5Y43Dkt56DJ3Eb9dk2JYrisvcrJhv
3m098YY2hseVLJ7M3jnf9slAXBrS23i+mUWHADeRpFIJZQQz1KEZVb1gsI0FO9Ch
Qp64hBPB4X1Ydxz57KywUpEgBC9Cj0KwWW9L6jIHK+V1izLoI1JslUxHXkyTy9as
WjmDuJp1nMewjbAza//HHNiqote59JewuLcxiA9EdK8jzQZXF+fbRasFO3XEobMl
0WYtN0MwYN2576xSGwTyp7IakFcNHjWciE9SuvPmg/VCLELV6vl4VJXAmv/kQKeE
whVq7kfdzRAKDwUXdXyCqzYSEi1+N+2izJaI4twgExDwm89OApe6aka8UBbqClyz
cn4UmqYMgjwvKXPJtqMUmzEwAzDxuXQJL6Uj5kY8RJLCqBv/eN+YoxODTZz3oDGU
988K6K2Q9QaOGSNJHiBrgddCARuxeRVizbDSi2GcSQdPRbTM4g7YK//KE8LoKdil
ngIeam0vomPJnJqI03U1wGKhxsDqOEEQ3CFch7mQ2S1eWtqeag3arcBVALZUdCzX
hckiSXd0Yuks8AyHb8LH7/3h1BJUWVg/v7iQ2E3UMHAE78Ww28MyppMhy+4U9knU
Dp2VXtxBOJVXJETdVFXY
=7Q/5
-----END PGP SIGNATURE-----

View File

@ -1,216 +0,0 @@
# Upstream fix on top of coreutils-v8.27:
# Add upstream patch to fix an heap overflow security issue
# in date(1) and touch(1) with a large TZ variable
# (CVE-2017-7476, rh#1444774, boo#1037124).
This issue is already fixed upstream, so here in openSUSE
we're just picking up the patches:
* [PATCH 1/2] Upstream gnulib fix:
http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=94e015715078
FWIW, this patch has been picked up by upstream coreutils by
the following update to latest gnulib:
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=5d4be52a982e
* [PATCH 2/2] Upstream coreutils test:
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=9287ef2b1707
This downstream patch squashes both commits into one.
Here are the original commit messages.
================================================================================
From 94e01571507835ff59dd8ce2a0b56a4b566965a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Mon, 24 Apr 2017 01:43:36 -0700
Subject: [PATCH 1/2] time_rz: fix heap buffer overflow vulnerability
This issue has been assigned CVE-2017-7476 and was
detected with American Fuzzy Lop 2.41b run on the
coreutils date(1) program with ASAN enabled.
ERROR: AddressSanitizer: heap-buffer-overflow on address 0x...
WRITE of size 8 at 0x60d00000cff8 thread T0
#1 0x443020 in extend_abbrs lib/time_rz.c:88
#2 0x443356 in save_abbr lib/time_rz.c:155
#3 0x44393f in localtime_rz lib/time_rz.c:290
#4 0x41e4fe in parse_datetime2 lib/parse-datetime.y:1798
A minimized reproducer is the following 120 byte TZ value,
which goes beyond the value of ABBR_SIZE_MIN (119) on x86_64.
Extend the aa...b portion to overwrite more of the heap.
date -d $(printf 'TZ="aaa%020daaaaaab%089d"')
localtime_rz and mktime_z were affected since commit 4bc76593.
parse_datetime was affected since commit 4e6e16b3f.
* lib/time_rz.c (save_abbr): Rearrange the calculation determining
whether there is enough buffer space available. The rearrangement
ensures we're only dealing with positive numbers, thus avoiding
the problematic promotion of signed to unsigned causing an invalid
comparison when zone_copy is more than ABBR_SIZE_MIN bytes beyond
the start of the buffer.
* tests/test-parse-datetime.c (main): Add a test case written by
Paul Eggert, which overwrites enough of the heap so that
standard glibc will fail with "free(): invalid pointer"
without the patch applied.
Reported and analyzed at https://bugzilla.redhat.com/1444774
================================================================================
From 9287ef2b1707e2a222f8ae776ce3785abcb16fba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Wed, 26 Apr 2017 20:51:39 -0700
Subject: [PATCH 2/2] date,touch: test and document large TZ security issue
Add a test for CVE-2017-7476 which was fixed in gnulib at:
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=94e01571
* tests/misc/date-tz.sh: Add a new test which overwrites enough
of the heap to trigger a segfault, even without ASAN enabled.
* tests/local.mk: Reference the new test.
* NEWS: Mention the bug fix.
---
NEWS | 9 +++++++++
gnulib-tests/test-parse-datetime.c | 16 ++++++++++++++++
lib/time_rz.c | 15 +++++++++++++--
tests/local.mk | 1 +
tests/misc/date-tz.sh | 26 ++++++++++++++++++++++++++
5 files changed, 65 insertions(+), 2 deletions(-)
Index: NEWS
===================================================================
--- NEWS.orig
+++ NEWS
@@ -1,5 +1,14 @@
GNU coreutils NEWS -*- outline -*-
+* Noteworthy openSUSE changes after release 8.27 [downstream]
+
+** Bug fixes
+
+ date and touch no longer overwrite the heap with large
+ user specified TZ values (CVE-2017-7476).
+ [bug introduced in coreutils-8.27]
+
+
* Noteworthy changes in release 8.27 (2017-03-08) [stable]
** Bug fixes
Index: gnulib-tests/test-parse-datetime.c
===================================================================
--- gnulib-tests/test-parse-datetime.c.orig
+++ gnulib-tests/test-parse-datetime.c
@@ -432,5 +432,21 @@ main (int argc _GL_UNUSED, char **argv)
ASSERT ( parse_datetime (&result, "TZ=\"\\\\\"", &now));
ASSERT ( parse_datetime (&result, "TZ=\"\\\"\"", &now));
+ /* Outlandishly-long time zone abbreviations should not cause problems. */
+ {
+ static char const bufprefix[] = "TZ=\"";
+ enum { tzname_len = 2000 };
+ static char const bufsuffix[] = "0\" 1970-01-01 01:02:03.123456789";
+ enum { bufsize = sizeof bufprefix - 1 + tzname_len + sizeof bufsuffix };
+ char buf[bufsize];
+ memcpy (buf, bufprefix, sizeof bufprefix - 1);
+ memset (buf + sizeof bufprefix - 1, 'X', tzname_len);
+ strcpy (buf + bufsize - sizeof bufsuffix, bufsuffix);
+ ASSERT (parse_datetime (&result, buf, &now));
+ LOG (buf, now, result);
+ ASSERT (result.tv_sec == 1 * 60 * 60 + 2 * 60 + 3
+ && result.tv_nsec == 123456789);
+ }
+
return 0;
}
Index: lib/time_rz.c
===================================================================
--- lib/time_rz.c.orig
+++ lib/time_rz.c
@@ -27,6 +27,7 @@
#include <time.h>
#include <errno.h>
+#include <limits.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
@@ -35,6 +36,10 @@
#include "flexmember.h"
#include "time-internal.h"
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
#if !HAVE_TZSET
static void tzset (void) { }
#endif
@@ -43,7 +48,7 @@ static void tzset (void) { }
the largest "small" request for the GNU C library malloc. */
enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
-/* Minimum size of the ABBRS member of struct abbr. ABBRS is larger
+/* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger
only in the unlikely case where an abbreviation longer than this is
used. */
enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) };
@@ -150,7 +155,13 @@ save_abbr (timezone_t tz, struct tm *tm)
if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set)))
{
size_t zone_size = strlen (zone) + 1;
- if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy)
+ size_t zone_used = zone_copy - tz->abbrs;
+ if (SIZE_MAX - zone_used < zone_size)
+ {
+ errno = ENOMEM;
+ return false;
+ }
+ if (zone_used + zone_size < ABBR_SIZE_MIN)
extend_abbrs (zone_copy, zone, zone_size);
else
{
Index: tests/local.mk
===================================================================
--- tests/local.mk.orig
+++ tests/local.mk
@@ -282,6 +282,7 @@ all_tests = \
tests/misc/csplit-suppress-matched.pl \
tests/misc/date-debug.sh \
tests/misc/date-sec.sh \
+ tests/misc/date-tz.sh \
tests/misc/dircolors.pl \
tests/misc/dirname.pl \
tests/misc/env-null.sh \
Index: tests/misc/date-tz.sh
===================================================================
--- /dev/null
+++ tests/misc/date-tz.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+# Verify TZ processing.
+
+# Copyright (C) 2017 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ date
+
+# coreutils-8.27 would overwrite the heap with large TZ values
+tz_long=$(printf '%2000s' | tr ' ' a)
+date -d "TZ=\"${tz_long}0\" 2017" || fail=1
+
+Exit $fail

View File

@ -1,27 +1,23 @@
--- ---
gnulib-tests/gnulib.mk | 12 ++++++------ gnulib-tests/gnulib.mk | 8 ++++----
1 file changed, 6 insertions(+), 6 deletions(-) 1 file changed, 4 insertions(+), 4 deletions(-)
Index: gnulib-tests/gnulib.mk Index: gnulib-tests/gnulib.mk
=================================================================== ===================================================================
--- gnulib-tests/gnulib.mk.orig --- gnulib-tests/gnulib.mk.orig
+++ gnulib-tests/gnulib.mk +++ gnulib-tests/gnulib.mk
@@ -893,12 +893,12 @@ EXTRA_DIST += test-getloadavg.c signatur @@ -895,10 +895,10 @@ EXTRA_DIST += test-getloadavg.c signatur
## end gnulib module getloadavg-tests
## begin gnulib module getlogin-tests ## begin gnulib module getlogin-tests
-
-TESTS += test-getlogin -TESTS += test-getlogin
-check_PROGRAMS += test-getlogin -check_PROGRAMS += test-getlogin
-test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN) -test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN)
-EXTRA_DIST += test-getlogin.c signature.h macros.h -EXTRA_DIST += test-getlogin.c test-getlogin.h signature.h macros.h
-
+#
+#TESTS += test-getlogin +#TESTS += test-getlogin
+#check_PROGRAMS += test-getlogin +#check_PROGRAMS += test-getlogin
+#test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN) +#test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN)
+#EXTRA_DIST += test-getlogin.c signature.h macros.h +#EXTRA_DIST += test-getlogin.c test-getlogin.h signature.h macros.h
+#
## end gnulib module getlogin-tests ## end gnulib module getlogin-tests
## begin gnulib module getndelim2-tests

View File

@ -41,7 +41,7 @@ Index: bootstrap.conf
=================================================================== ===================================================================
--- bootstrap.conf.orig --- bootstrap.conf.orig
+++ bootstrap.conf +++ bootstrap.conf
@@ -152,6 +152,7 @@ gnulib_modules=" @@ -154,6 +154,7 @@ gnulib_modules="
maintainer-makefile maintainer-makefile
malloc-gnu malloc-gnu
manywarnings manywarnings
@ -53,7 +53,7 @@ Index: configure.ac
=================================================================== ===================================================================
--- configure.ac.orig --- configure.ac.orig
+++ configure.ac +++ configure.ac
@@ -429,6 +429,8 @@ fi @@ -433,6 +433,8 @@ fi
# I'm leaving it here for now. This whole thing needs to be modernized... # I'm leaving it here for now. This whole thing needs to be modernized...
gl_WINSIZE_IN_PTEM gl_WINSIZE_IN_PTEM
@ -944,15 +944,15 @@ Index: src/expand-common.c
=================================================================== ===================================================================
--- src/expand-common.c.orig --- src/expand-common.c.orig
+++ src/expand-common.c +++ src/expand-common.c
@@ -18,6 +18,7 @@ @@ -19,6 +19,7 @@
#include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
+#include <mbfile.h> +#include <mbfile.h>
#include "system.h" #include "system.h"
#include "die.h" #include "die.h"
#include "error.h" #include "error.h"
@@ -105,6 +106,119 @@ set_extend_size (uintmax_t tabval) @@ -126,6 +127,119 @@ set_increment_size (uintmax_t tabval)
return ok; return ok;
} }
@ -1109,7 +1109,7 @@ Index: src/expand.c
#include "system.h" #include "system.h"
#include "die.h" #include "die.h"
#include "xstrndup.h" #include "xstrndup.h"
@@ -100,19 +103,41 @@ expand (void) @@ -98,19 +101,41 @@ expand (void)
{ {
/* Input stream. */ /* Input stream. */
FILE *fp = next_file (NULL); FILE *fp = next_file (NULL);
@ -1155,7 +1155,7 @@ Index: src/expand.c
/* The following variables have valid values only when CONVERT /* The following variables have valid values only when CONVERT
is true: */ is true: */
@@ -122,17 +147,48 @@ expand (void) @@ -120,17 +145,48 @@ expand (void)
/* Index in TAB_LIST of next tab stop to examine. */ /* Index in TAB_LIST of next tab stop to examine. */
size_t tab_index = 0; size_t tab_index = 0;
@ -1208,7 +1208,7 @@ Index: src/expand.c
{ {
/* Column the next input tab stop is on. */ /* Column the next input tab stop is on. */
uintmax_t next_tab_column; uintmax_t next_tab_column;
@@ -151,32 +207,34 @@ expand (void) @@ -149,32 +205,34 @@ expand (void)
if (putchar (' ') < 0) if (putchar (' ') < 0)
die (EXIT_FAILURE, errno, _("write error")); die (EXIT_FAILURE, errno, _("write error"));
@ -2043,7 +2043,7 @@ Index: src/join.c
xfields (line); xfields (line);
if (prevline[which - 1]) if (prevline[which - 1])
@@ -567,21 +807,28 @@ prfield (size_t n, struct line const *li @@ -563,21 +803,28 @@ prfield (size_t n, struct line const *li
/* Output all the fields in line, other than the join field. */ /* Output all the fields in line, other than the join field. */
@ -2075,7 +2075,7 @@ Index: src/join.c
prfield (i, line); prfield (i, line);
} }
} }
@@ -592,7 +839,6 @@ static void @@ -588,7 +835,6 @@ static void
prjoin (struct line const *line1, struct line const *line2) prjoin (struct line const *line1, struct line const *line2)
{ {
const struct outlist *outlist; const struct outlist *outlist;
@ -2083,7 +2083,7 @@ Index: src/join.c
size_t field; size_t field;
struct line const *line; struct line const *line;
@@ -626,7 +872,7 @@ prjoin (struct line const *line1, struct @@ -622,7 +868,7 @@ prjoin (struct line const *line1, struct
o = o->next; o = o->next;
if (o == NULL) if (o == NULL)
break; break;
@ -2092,7 +2092,7 @@ Index: src/join.c
} }
putchar (eolchar); putchar (eolchar);
} }
@@ -1104,20 +1350,43 @@ main (int argc, char **argv) @@ -1099,20 +1345,43 @@ main (int argc, char **argv)
case 't': case 't':
{ {
@ -2369,7 +2369,7 @@ Index: src/pr.c
use_col_separator = true; use_col_separator = true;
if (optarg) if (optarg)
separator_string (optarg); separator_string (optarg);
@@ -1166,10 +1250,45 @@ getoptnum (const char *n_str, int min, i @@ -1165,10 +1249,45 @@ getoptnum (const char *n_str, int min, i
a number. */ a number. */
static void static void
@ -2417,7 +2417,7 @@ Index: src/pr.c
if (*arg) if (*arg)
{ {
long int tmp_long; long int tmp_long;
@@ -1191,6 +1310,11 @@ static void @@ -1190,6 +1309,11 @@ static void
init_parameters (int number_of_files) init_parameters (int number_of_files)
{ {
int chars_used_by_number = 0; int chars_used_by_number = 0;
@ -2429,7 +2429,7 @@ Index: src/pr.c
lines_per_body = lines_per_page - lines_per_header - lines_per_footer; lines_per_body = lines_per_page - lines_per_header - lines_per_footer;
if (lines_per_body <= 0) if (lines_per_body <= 0)
@@ -1228,7 +1352,7 @@ init_parameters (int number_of_files) @@ -1227,7 +1351,7 @@ init_parameters (int number_of_files)
else else
col_sep_string = column_separator; col_sep_string = column_separator;
@ -2438,7 +2438,7 @@ Index: src/pr.c
use_col_separator = true; use_col_separator = true;
} }
/* It's rather pointless to define a TAB separator with column /* It's rather pointless to define a TAB separator with column
@@ -1258,11 +1382,11 @@ init_parameters (int number_of_files) @@ -1257,11 +1381,11 @@ init_parameters (int number_of_files)
+ TAB_WIDTH (chars_per_input_tab, chars_per_number); */ + TAB_WIDTH (chars_per_input_tab, chars_per_number); */
/* Estimate chars_per_text without any margin and keep it constant. */ /* Estimate chars_per_text without any margin and keep it constant. */
@ -2452,7 +2452,7 @@ Index: src/pr.c
/* The number is part of the column width unless we are /* The number is part of the column width unless we are
printing files in parallel. */ printing files in parallel. */
@@ -1271,7 +1395,7 @@ init_parameters (int number_of_files) @@ -1270,7 +1394,7 @@ init_parameters (int number_of_files)
} }
int sep_chars, useful_chars; int sep_chars, useful_chars;
@ -2461,7 +2461,7 @@ Index: src/pr.c
sep_chars = INT_MAX; sep_chars = INT_MAX;
if (INT_SUBTRACT_WRAPV (chars_per_line - chars_used_by_number, sep_chars, if (INT_SUBTRACT_WRAPV (chars_per_line - chars_used_by_number, sep_chars,
&useful_chars)) &useful_chars))
@@ -1294,7 +1418,7 @@ init_parameters (int number_of_files) @@ -1293,7 +1417,7 @@ init_parameters (int number_of_files)
We've to use 8 as the lower limit, if we use chars_per_default_tab = 8 We've to use 8 as the lower limit, if we use chars_per_default_tab = 8
to expand a tab which is not an input_tab-char. */ to expand a tab which is not an input_tab-char. */
free (clump_buff); free (clump_buff);
@ -2470,7 +2470,7 @@ Index: src/pr.c
} }
/* Open the necessary files, /* Open the necessary files,
@@ -1402,7 +1526,7 @@ init_funcs (void) @@ -1399,7 +1523,7 @@ init_funcs (void)
/* Enlarge p->start_position of first column to use the same form of /* Enlarge p->start_position of first column to use the same form of
padding_not_printed with all columns. */ padding_not_printed with all columns. */
@ -2479,7 +2479,7 @@ Index: src/pr.c
/* This loop takes care of all but the rightmost column. */ /* This loop takes care of all but the rightmost column. */
@@ -1436,7 +1560,7 @@ init_funcs (void) @@ -1433,7 +1557,7 @@ init_funcs (void)
} }
else else
{ {
@ -2488,7 +2488,7 @@ Index: src/pr.c
h_next = h + chars_per_column; h_next = h + chars_per_column;
} }
} }
@@ -1727,9 +1851,9 @@ static void @@ -1724,9 +1848,9 @@ static void
align_column (COLUMN *p) align_column (COLUMN *p)
{ {
padding_not_printed = p->start_position; padding_not_printed = p->start_position;
@ -2500,7 +2500,7 @@ Index: src/pr.c
padding_not_printed = ANYWHERE; padding_not_printed = ANYWHERE;
} }
@@ -2004,13 +2128,13 @@ store_char (char c) @@ -2001,13 +2125,13 @@ store_char (char c)
/* May be too generous. */ /* May be too generous. */
buff = X2REALLOC (buff, &buff_allocated); buff = X2REALLOC (buff, &buff_allocated);
} }
@ -2516,7 +2516,7 @@ Index: src/pr.c
char *s; char *s;
int num_width; int num_width;
@@ -2027,22 +2151,24 @@ add_line_number (COLUMN *p) @@ -2024,22 +2148,24 @@ add_line_number (COLUMN *p)
/* Tabification is assumed for multiple columns, also for n-separators, /* Tabification is assumed for multiple columns, also for n-separators,
but 'default n-separator = TAB' hasn't been given priority over but 'default n-separator = TAB' hasn't been given priority over
equal column_width also specified by POSIX. */ equal column_width also specified by POSIX. */
@ -2545,7 +2545,7 @@ Index: src/pr.c
output_position = POS_AFTER_TAB (chars_per_output_tab, output_position = POS_AFTER_TAB (chars_per_output_tab,
output_position); output_position);
} }
@@ -2203,7 +2329,7 @@ print_white_space (void) @@ -2198,7 +2324,7 @@ print_white_space (void)
while (goal - h_old > 1 while (goal - h_old > 1
&& (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal) && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
{ {
@ -2554,7 +2554,7 @@ Index: src/pr.c
h_old = h_new; h_old = h_new;
} }
while (++h_old <= goal) while (++h_old <= goal)
@@ -2223,6 +2349,7 @@ print_sep_string (void) @@ -2218,6 +2344,7 @@ print_sep_string (void)
{ {
char const *s = col_sep_string; char const *s = col_sep_string;
int l = col_sep_length; int l = col_sep_length;
@ -2562,7 +2562,7 @@ Index: src/pr.c
if (separators_not_printed <= 0) if (separators_not_printed <= 0)
{ {
@@ -2234,6 +2361,7 @@ print_sep_string (void) @@ -2229,6 +2356,7 @@ print_sep_string (void)
{ {
for (; separators_not_printed > 0; --separators_not_printed) for (; separators_not_printed > 0; --separators_not_printed)
{ {
@ -2570,7 +2570,7 @@ Index: src/pr.c
while (l-- > 0) while (l-- > 0)
{ {
/* 3 types of sep_strings: spaces only, spaces and chars, /* 3 types of sep_strings: spaces only, spaces and chars,
@@ -2247,12 +2375,15 @@ print_sep_string (void) @@ -2242,12 +2370,15 @@ print_sep_string (void)
} }
else else
{ {
@ -2587,7 +2587,7 @@ Index: src/pr.c
/* sep_string ends with some spaces */ /* sep_string ends with some spaces */
if (spaces_not_printed > 0) if (spaces_not_printed > 0)
print_white_space (); print_white_space ();
@@ -2280,7 +2411,7 @@ print_clump (COLUMN *p, int n, char *clu @@ -2275,7 +2406,7 @@ print_clump (COLUMN *p, int n, char *clu
required number of tabs and spaces. */ required number of tabs and spaces. */
static void static void
@ -2596,7 +2596,7 @@ Index: src/pr.c
{ {
if (tabify_output) if (tabify_output)
{ {
@@ -2304,6 +2435,74 @@ print_char (char c) @@ -2299,6 +2430,74 @@ print_char (char c)
putchar (c); putchar (c);
} }
@ -2671,7 +2671,7 @@ Index: src/pr.c
/* Skip to page PAGE before printing. /* Skip to page PAGE before printing.
PAGE may be larger than total number of pages. */ PAGE may be larger than total number of pages. */
@@ -2483,9 +2682,9 @@ read_line (COLUMN *p) @@ -2476,9 +2675,9 @@ read_line (COLUMN *p)
align_empty_cols = false; align_empty_cols = false;
} }
@ -2683,8 +2683,8 @@ Index: src/pr.c
padding_not_printed = ANYWHERE; padding_not_printed = ANYWHERE;
} }
@@ -2555,7 +2754,7 @@ print_stored (COLUMN *p) @@ -2547,7 +2746,7 @@ print_stored (COLUMN *p)
int i; COLUMN *q;
int line = p->current_line++; int line = p->current_line++;
- char *first = &buff[line_vector[line]]; - char *first = &buff[line_vector[line]];
@ -2692,7 +2692,7 @@ Index: src/pr.c
/* FIXME /* FIXME
UMR: Uninitialized memory read: UMR: Uninitialized memory read:
* This is occurring while in: * This is occurring while in:
@@ -2567,7 +2766,7 @@ print_stored (COLUMN *p) @@ -2559,7 +2758,7 @@ print_stored (COLUMN *p)
xmalloc [xmalloc.c:94] xmalloc [xmalloc.c:94]
init_store_cols [pr.c:1648] init_store_cols [pr.c:1648]
*/ */
@ -2701,7 +2701,7 @@ Index: src/pr.c
pad_vertically = true; pad_vertically = true;
@@ -2586,9 +2785,9 @@ print_stored (COLUMN *p) @@ -2579,9 +2778,9 @@ print_stored (COLUMN *p)
} }
} }
@ -2713,7 +2713,7 @@ Index: src/pr.c
padding_not_printed = ANYWHERE; padding_not_printed = ANYWHERE;
} }
@@ -2601,8 +2800,8 @@ print_stored (COLUMN *p) @@ -2594,8 +2793,8 @@ print_stored (COLUMN *p)
if (spaces_not_printed == 0) if (spaces_not_printed == 0)
{ {
output_position = p->start_position + end_vector[line]; output_position = p->start_position + end_vector[line];
@ -2724,7 +2724,7 @@ Index: src/pr.c
} }
return true; return true;
@@ -2621,7 +2820,7 @@ print_stored (COLUMN *p) @@ -2614,7 +2813,7 @@ print_stored (COLUMN *p)
number of characters is 1.) */ number of characters is 1.) */
static int static int
@ -2733,7 +2733,7 @@ Index: src/pr.c
{ {
unsigned char uc = c; unsigned char uc = c;
char *s = clump_buff; char *s = clump_buff;
@@ -2631,10 +2830,10 @@ char_to_clump (char c) @@ -2624,10 +2823,10 @@ char_to_clump (char c)
int chars; int chars;
int chars_per_c = 8; int chars_per_c = 8;
@ -2746,7 +2746,7 @@ Index: src/pr.c
{ {
width = TAB_WIDTH (chars_per_c, input_position); width = TAB_WIDTH (chars_per_c, input_position);
@@ -2715,6 +2914,164 @@ char_to_clump (char c) @@ -2708,6 +2907,164 @@ char_to_clump (char c)
return chars; return chars;
} }
@ -2930,7 +2930,7 @@ Index: src/sort.c
#include "system.h" #include "system.h"
#include "argmatch.h" #include "argmatch.h"
#include "die.h" #include "die.h"
@@ -165,14 +173,39 @@ static int decimal_point; @@ -169,14 +177,39 @@ static int decimal_point;
/* Thousands separator; if -1, then there isn't one. */ /* Thousands separator; if -1, then there isn't one. */
static int thousands_sep; static int thousands_sep;
@ -2971,7 +2971,7 @@ Index: src/sort.c
/* The kind of blanks for '-b' to skip in various options. */ /* The kind of blanks for '-b' to skip in various options. */
enum blanktype { bl_start, bl_end, bl_both }; enum blanktype { bl_start, bl_end, bl_both };
@@ -346,13 +379,11 @@ static bool reverse; @@ -350,13 +383,11 @@ static bool reverse;
they were read if all keys compare equal. */ they were read if all keys compare equal. */
static bool stable; static bool stable;
@ -2988,7 +2988,7 @@ Index: src/sort.c
/* Flag to remove consecutive duplicate lines from the output. /* Flag to remove consecutive duplicate lines from the output.
Only the last of a sequence of equal lines will be output. */ Only the last of a sequence of equal lines will be output. */
@@ -811,6 +842,46 @@ reap_all (void) @@ -814,6 +845,46 @@ reap_all (void)
reap (-1); reap (-1);
} }
@ -3035,7 +3035,7 @@ Index: src/sort.c
/* Clean up any remaining temporary files. */ /* Clean up any remaining temporary files. */
static void static void
@@ -1255,7 +1326,7 @@ zaptemp (char const *name) @@ -1264,7 +1335,7 @@ zaptemp (char const *name)
free (node); free (node);
} }
@ -3044,7 +3044,7 @@ Index: src/sort.c
static int static int
struct_month_cmp (void const *m1, void const *m2) struct_month_cmp (void const *m1, void const *m2)
@@ -1270,7 +1341,7 @@ struct_month_cmp (void const *m1, void c @@ -1279,7 +1350,7 @@ struct_month_cmp (void const *m1, void c
/* Initialize the character class tables. */ /* Initialize the character class tables. */
static void static void
@ -3053,7 +3053,7 @@ Index: src/sort.c
{ {
size_t i; size_t i;
@@ -1282,7 +1353,7 @@ inittables (void) @@ -1291,7 +1362,7 @@ inittables (void)
fold_toupper[i] = toupper (i); fold_toupper[i] = toupper (i);
} }
@ -3062,7 +3062,7 @@ Index: src/sort.c
/* If we're not in the "C" locale, read different names for months. */ /* If we're not in the "C" locale, read different names for months. */
if (hard_LC_TIME) if (hard_LC_TIME)
{ {
@@ -1364,6 +1435,84 @@ specify_nmerge (int oi, char c, char con @@ -1373,6 +1444,84 @@ specify_nmerge (int oi, char c, char con
xstrtol_fatal (e, oi, c, long_options, s); xstrtol_fatal (e, oi, c, long_options, s);
} }
@ -3147,7 +3147,7 @@ Index: src/sort.c
/* Specify the amount of main memory to use when sorting. */ /* Specify the amount of main memory to use when sorting. */
static void static void
specify_sort_size (int oi, char c, char const *s) specify_sort_size (int oi, char c, char const *s)
@@ -1597,7 +1746,7 @@ buffer_linelim (struct buffer const *buf @@ -1604,7 +1753,7 @@ buffer_linelim (struct buffer const *buf
by KEY in LINE. */ by KEY in LINE. */
static char * static char *
@ -3156,7 +3156,7 @@ Index: src/sort.c
{ {
char *ptr = line->text, *lim = ptr + line->length - 1; char *ptr = line->text, *lim = ptr + line->length - 1;
size_t sword = key->sword; size_t sword = key->sword;
@@ -1606,10 +1755,10 @@ begfield (struct line const *line, struc @@ -1613,10 +1762,10 @@ begfield (struct line const *line, struc
/* The leading field separator itself is included in a field when -t /* The leading field separator itself is included in a field when -t
is absent. */ is absent. */
@ -3169,7 +3169,7 @@ Index: src/sort.c
++ptr; ++ptr;
if (ptr < lim) if (ptr < lim)
++ptr; ++ptr;
@@ -1635,11 +1784,70 @@ begfield (struct line const *line, struc @@ -1642,11 +1791,70 @@ begfield (struct line const *line, struc
return ptr; return ptr;
} }
@ -3241,7 +3241,7 @@ Index: src/sort.c
{ {
char *ptr = line->text, *lim = ptr + line->length - 1; char *ptr = line->text, *lim = ptr + line->length - 1;
size_t eword = key->eword, echar = key->echar; size_t eword = key->eword, echar = key->echar;
@@ -1654,10 +1862,10 @@ limfield (struct line const *line, struc @@ -1661,10 +1869,10 @@ limfield (struct line const *line, struc
'beginning' is the first character following the delimiting TAB. 'beginning' is the first character following the delimiting TAB.
Otherwise, leave PTR pointing at the first 'blank' character after Otherwise, leave PTR pointing at the first 'blank' character after
the preceding field. */ the preceding field. */
@ -3254,7 +3254,7 @@ Index: src/sort.c
++ptr; ++ptr;
if (ptr < lim && (eword || echar)) if (ptr < lim && (eword || echar))
++ptr; ++ptr;
@@ -1703,10 +1911,10 @@ limfield (struct line const *line, struc @@ -1710,10 +1918,10 @@ limfield (struct line const *line, struc
*/ */
/* Make LIM point to the end of (one byte past) the current field. */ /* Make LIM point to the end of (one byte past) the current field. */
@ -3267,7 +3267,7 @@ Index: src/sort.c
if (newlim) if (newlim)
lim = newlim; lim = newlim;
} }
@@ -1737,6 +1945,130 @@ limfield (struct line const *line, struc @@ -1744,6 +1952,130 @@ limfield (struct line const *line, struc
return ptr; return ptr;
} }
@ -3398,7 +3398,7 @@ Index: src/sort.c
/* Fill BUF reading from FP, moving buf->left bytes from the end /* 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 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 file wasn't terminated by a newline, supply one. Set up BUF's line
@@ -1823,8 +2155,22 @@ fillbuf (struct buffer *buf, FILE *fp, c @@ -1830,8 +2162,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
else else
{ {
if (key->skipsblanks) if (key->skipsblanks)
@ -3423,7 +3423,7 @@ Index: src/sort.c
line->keybeg = line_start; line->keybeg = line_start;
} }
} }
@@ -1958,12 +2304,10 @@ find_unit_order (char const *number) @@ -1965,12 +2311,10 @@ find_unit_order (char const *number)
<none/unknown> < K/k < M < G < T < P < E < Z < Y */ <none/unknown> < K/k < M < G < T < P < E < Z < Y */
static int static int
@ -3439,7 +3439,7 @@ Index: src/sort.c
int diff = find_unit_order (a) - find_unit_order (b); int diff = find_unit_order (a) - find_unit_order (b);
return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep)); return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep));
@@ -1974,7 +2318,7 @@ human_numcompare (char const *a, char co @@ -1981,7 +2325,7 @@ human_numcompare (char const *a, char co
hideously fast. */ hideously fast. */
static int static int
@ -3448,7 +3448,7 @@ Index: src/sort.c
{ {
while (blanks[to_uchar (*a)]) while (blanks[to_uchar (*a)])
a++; a++;
@@ -1984,6 +2328,25 @@ numcompare (char const *a, char const *b @@ -1991,6 +2335,25 @@ numcompare (char const *a, char const *b
return strnumcmp (a, b, decimal_point, thousands_sep); return strnumcmp (a, b, decimal_point, thousands_sep);
} }
@ -3474,7 +3474,7 @@ Index: src/sort.c
/* Work around a problem whereby the long double value returned by glibc's /* Work around a problem whereby the long double value returned by glibc's
strtold ("NaN", ...) contains uninitialized bits: clear all bytes of strtold ("NaN", ...) contains uninitialized bits: clear all bytes of
A and B before calling strtold. FIXME: remove this function once A and B before calling strtold. FIXME: remove this function once
@@ -2034,7 +2397,7 @@ general_numcompare (char const *sa, char @@ -2041,7 +2404,7 @@ general_numcompare (char const *sa, char
Return 0 if the name in S is not recognized. */ Return 0 if the name in S is not recognized. */
static int static int
@ -3483,7 +3483,7 @@ Index: src/sort.c
{ {
size_t lo = 0; size_t lo = 0;
size_t hi = MONTHS_PER_YEAR; size_t hi = MONTHS_PER_YEAR;
@@ -2310,15 +2673,14 @@ debug_key (struct line const *line, stru @@ -2317,15 +2680,14 @@ debug_key (struct line const *line, stru
char saved = *lim; char saved = *lim;
*lim = '\0'; *lim = '\0';
@ -3501,7 +3501,7 @@ Index: src/sort.c
else if (key->general_numeric) else if (key->general_numeric)
ignore_value (strtold (beg, &tighter_lim)); ignore_value (strtold (beg, &tighter_lim));
else if (key->numeric || key->human_numeric) else if (key->numeric || key->human_numeric)
@@ -2452,7 +2814,7 @@ key_warnings (struct keyfield const *gke @@ -2459,7 +2821,7 @@ key_warnings (struct keyfield const *gke
/* Warn about significant leading blanks. */ /* Warn about significant leading blanks. */
bool implicit_skip = key_numeric (key) || key->month; bool implicit_skip = key_numeric (key) || key->month;
bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */ bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */
@ -3510,7 +3510,7 @@ Index: src/sort.c
&& ((!key->skipsblanks && !implicit_skip) && ((!key->skipsblanks && !implicit_skip)
|| (!key->skipsblanks && key->schar) || (!key->skipsblanks && key->schar)
|| (!key->skipeblanks && key->echar))) || (!key->skipeblanks && key->echar)))
@@ -2510,11 +2872,87 @@ key_warnings (struct keyfield const *gke @@ -2517,11 +2879,87 @@ key_warnings (struct keyfield const *gke
error (0, 0, _("option '-r' only applies to last-resort comparison")); error (0, 0, _("option '-r' only applies to last-resort comparison"));
} }
@ -3599,7 +3599,7 @@ Index: src/sort.c
{ {
struct keyfield *key = keylist; struct keyfield *key = keylist;
@@ -2599,7 +3037,7 @@ keycompare (struct line const *a, struct @@ -2606,7 +3044,7 @@ keycompare (struct line const *a, struct
else if (key->human_numeric) else if (key->human_numeric)
diff = human_numcompare (ta, tb); diff = human_numcompare (ta, tb);
else if (key->month) else if (key->month)
@ -3608,7 +3608,7 @@ Index: src/sort.c
else if (key->random) else if (key->random)
diff = compare_random (ta, tlena, tb, tlenb); diff = compare_random (ta, tlena, tb, tlenb);
else if (key->version) else if (key->version)
@@ -2715,6 +3153,211 @@ keycompare (struct line const *a, struct @@ -2722,6 +3160,211 @@ keycompare (struct line const *a, struct
return key->reverse ? -diff : diff; return key->reverse ? -diff : diff;
} }
@ -3820,16 +3820,16 @@ Index: src/sort.c
/* Compare two lines A and B, returning negative, zero, or positive /* Compare two lines A and B, returning negative, zero, or positive
depending on whether A compares less than, equal to, or greater than B. */ depending on whether A compares less than, equal to, or greater than B. */
@@ -2742,7 +3385,7 @@ compare (struct line const *a, struct li @@ -2749,7 +3392,7 @@ compare (struct line const *a, struct li
diff = - NONZERO (blen); diff = - NONZERO (blen);
else if (blen == 0) else if (blen == 0)
diff = 1; diff = 1;
- else if (hard_LC_COLLATE) - else if (hard_LC_COLLATE)
+ else if (hard_LC_COLLATE && !folding) + else if (hard_LC_COLLATE && !folding)
{ {
/* Note xmemcoll0 is a performance enhancement as /* xmemcoll0 is a performance enhancement as
it will not unconditionally write '\0' after the it will not unconditionally write '\0' after the
@@ -4139,6 +4782,7 @@ set_ordering (char const *s, struct keyf @@ -4144,6 +4787,7 @@ set_ordering (char const *s, struct keyf
break; break;
case 'f': case 'f':
key->translate = fold_toupper; key->translate = fold_toupper;
@ -3837,7 +3837,7 @@ Index: src/sort.c
break; break;
case 'g': case 'g':
key->general_numeric = true; key->general_numeric = true;
@@ -4218,7 +4862,7 @@ main (int argc, char **argv) @@ -4223,7 +4867,7 @@ main (int argc, char **argv)
initialize_exit_failure (SORT_FAILURE); initialize_exit_failure (SORT_FAILURE);
hard_LC_COLLATE = hard_locale (LC_COLLATE); hard_LC_COLLATE = hard_locale (LC_COLLATE);
@ -3846,7 +3846,7 @@ Index: src/sort.c
hard_LC_TIME = hard_locale (LC_TIME); hard_LC_TIME = hard_locale (LC_TIME);
#endif #endif
@@ -4239,6 +4883,29 @@ main (int argc, char **argv) @@ -4244,6 +4888,29 @@ main (int argc, char **argv)
thousands_sep = -1; thousands_sep = -1;
} }
@ -3876,7 +3876,7 @@ Index: src/sort.c
have_read_stdin = false; have_read_stdin = false;
inittables (); inittables ();
@@ -4513,13 +5180,34 @@ main (int argc, char **argv) @@ -4518,13 +5185,34 @@ main (int argc, char **argv)
case 't': case 't':
{ {
@ -3915,7 +3915,7 @@ Index: src/sort.c
else else
{ {
/* Provoke with 'sort -txx'. Complain about /* Provoke with 'sort -txx'. Complain about
@@ -4530,9 +5218,11 @@ main (int argc, char **argv) @@ -4535,9 +5223,11 @@ main (int argc, char **argv)
quote (optarg)); quote (optarg));
} }
} }
@ -3929,7 +3929,7 @@ Index: src/sort.c
} }
break; break;
@@ -4770,12 +5460,10 @@ main (int argc, char **argv) @@ -4765,12 +5455,10 @@ main (int argc, char **argv)
sort (files, nfiles, outfile, nthreads); sort (files, nfiles, outfile, nthreads);
} }
@ -4763,7 +4763,7 @@ Index: tests/local.mk
=================================================================== ===================================================================
--- tests/local.mk.orig --- tests/local.mk.orig
+++ tests/local.mk +++ tests/local.mk
@@ -352,6 +352,8 @@ all_tests = \ @@ -357,6 +357,8 @@ all_tests = \
tests/misc/sort-discrim.sh \ tests/misc/sort-discrim.sh \
tests/misc/sort-files0-from.pl \ tests/misc/sort-files0-from.pl \
tests/misc/sort-float.sh \ tests/misc/sort-float.sh \
@ -4772,7 +4772,7 @@ Index: tests/local.mk
tests/misc/sort-h-thousands-sep.sh \ tests/misc/sort-h-thousands-sep.sh \
tests/misc/sort-merge.pl \ tests/misc/sort-merge.pl \
tests/misc/sort-merge-fdlimit.sh \ tests/misc/sort-merge-fdlimit.sh \
@@ -544,6 +546,7 @@ all_tests = \ @@ -550,6 +552,7 @@ all_tests = \
tests/du/threshold.sh \ tests/du/threshold.sh \
tests/du/trailing-slash.sh \ tests/du/trailing-slash.sh \
tests/du/two-args.sh \ tests/du/two-args.sh \
@ -4780,7 +4780,7 @@ Index: tests/local.mk
tests/id/gnu-zero-uids.sh \ tests/id/gnu-zero-uids.sh \
tests/id/no-context.sh \ tests/id/no-context.sh \
tests/id/context.sh \ tests/id/context.sh \
@@ -684,6 +687,7 @@ all_tests = \ @@ -692,6 +695,7 @@ all_tests = \
tests/touch/read-only.sh \ tests/touch/read-only.sh \
tests/touch/relative.sh \ tests/touch/relative.sh \
tests/touch/trailing-slash.sh \ tests/touch/trailing-slash.sh \
@ -4834,8 +4834,8 @@ Index: tests/misc/expand.pl
my @Tests = my @Tests =
( (
['t1', '--tabs=3', {IN=>"a\tb"}, {OUT=>"a b"}], ['t1', '--tabs=3', {IN=>"a\tb"}, {OUT=>"a b"}],
@@ -152,6 +161,8 @@ my @Tests = @@ -168,6 +177,8 @@ my @Tests =
['trail9', '--tab=1,2 -t/5',{IN=>"\ta\tb\tc"}, {OUT=>" a b c"}],
# Test errors # Test errors
+ # FIXME: The following tests contain quoting specific to LC_MESSAGES + # FIXME: The following tests contain quoting specific to LC_MESSAGES
@ -4843,7 +4843,7 @@ Index: tests/misc/expand.pl
['e1', '--tabs="a"', {IN=>''}, {OUT=>''}, {EXIT=>1}, ['e1', '--tabs="a"', {IN=>''}, {OUT=>''}, {EXIT=>1},
{ERR => "$prog: tab size contains invalid character(s): 'a'\n"}], {ERR => "$prog: tab size contains invalid character(s): 'a'\n"}],
['e2', "-t $UINTMAX_OFLOW", {IN=>''}, {OUT=>''}, {EXIT=>1}, ['e2', "-t $UINTMAX_OFLOW", {IN=>''}, {OUT=>''}, {EXIT=>1},
@@ -168,6 +179,37 @@ my @Tests = @@ -184,6 +195,37 @@ my @Tests =
{ERR => "$prog: '/' specifier not at start of number: '/'\n"}], {ERR => "$prog: '/' specifier not at start of number: '/'\n"}],
); );

View File

@ -31,7 +31,7 @@ Index: doc/coreutils.texi
* hostid invocation:: Print numeric host identifier * hostid invocation:: Print numeric host identifier
* uptime invocation:: Print system uptime and load * uptime invocation:: Print system uptime and load
@@ -15422,7 +15420,6 @@ information. @@ -15515,7 +15513,6 @@ information.
* arch invocation:: Print machine hardware name. * arch invocation:: Print machine hardware name.
* nproc invocation:: Print the number of processors. * nproc invocation:: Print the number of processors.
* uname invocation:: Print system information. * uname invocation:: Print system information.
@ -39,7 +39,7 @@ Index: doc/coreutils.texi
* hostid invocation:: Print numeric host identifier. * hostid invocation:: Print numeric host identifier.
* uptime invocation:: Print system uptime and load. * uptime invocation:: Print system uptime and load.
@end menu @end menu
@@ -16266,15 +16263,6 @@ Note this is non-portable (even across G @@ -16359,15 +16356,6 @@ Note this is non-portable (even across G
Print the machine hardware name (sometimes called the hardware class Print the machine hardware name (sometimes called the hardware class
or hardware type). or hardware type).
@ -55,7 +55,7 @@ Index: doc/coreutils.texi
@item -p @item -p
@itemx --processor @itemx --processor
@opindex -p @opindex -p
@@ -16328,34 +16316,6 @@ Print the kernel version. @@ -16421,34 +16409,6 @@ Print the kernel version.
@exitstatus @exitstatus

View File

@ -33,7 +33,7 @@ Index: doc/coreutils.texi
Delaying Delaying
* sleep invocation:: Delay for a specified time * sleep invocation:: Delay for a specified time
@@ -17250,90 +17244,6 @@ the exit status of @var{command} otherwi @@ -17369,90 +17363,6 @@ the exit status of @var{command} otherwi
@end display @end display

View File

@ -21,7 +21,7 @@ Index: gnulib-tests/gnulib.mk
=================================================================== ===================================================================
--- gnulib-tests/gnulib.mk.orig --- gnulib-tests/gnulib.mk.orig
+++ gnulib-tests/gnulib.mk +++ gnulib-tests/gnulib.mk
@@ -2239,9 +2239,10 @@ EXTRA_DIST += test-timespec.c macros.h @@ -2250,9 +2250,10 @@ EXTRA_DIST += test-timespec.c macros.h
## begin gnulib module tls-tests ## begin gnulib module tls-tests

View File

@ -1,50 +0,0 @@
Upstream patch on top of coreutils-8.27.
Avoid a FP of tests/misc/date-debug.sh with newer timezone-2017a.
Upstream patch:
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=612086660b
From 612086660bab9bf981894da146550e9101224b17 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 9 Mar 2017 23:59:05 -0800
Subject: [PATCH] tests: port to tzdb-2017a
Problem reported by Bernhard Voelker in:
http://lists.gnu.org/archive/html/coreutils/2017-03/msg00026.html
* tests/misc/date-debug.sh: Port test to tzdb 2017a,
and future-proof the America/Belize test.
---
tests/misc/date-debug.sh | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
Index: tests/misc/date-debug.sh
===================================================================
--- tests/misc/date-debug.sh.orig
+++ tests/misc/date-debug.sh
@@ -52,10 +52,11 @@ date: output timezone: +09:00 (set from
date: final: 661095000.000000000 (epoch-seconds)
date: final: (Y-M-D) 1990-12-13 13:30:00 (UTC0)
date: final: (Y-M-D) 1990-12-13 22:30:00 (output timezone TZ=+09:00)
-Thu Dec 13 07:30:00 CST 1990
+Thu Dec 13 07:30:00 -0600 1990
EOF
-TZ=America/Belize date --debug -d "$in1" >out1 2>&1 || fail=1
+TZ=America/Belize date --debug -d "$in1" +'%a %b %e %T %z %Y' >out1 2>&1 ||
+ fail=1
compare exp1 out1 || fail=1
@@ -94,10 +95,10 @@ date: output timezone: -05:00 (set from
date: final: 1.000000000 (epoch-seconds)
date: final: (Y-M-D) 1970-01-01 00:00:01 (UTC0)
date: final: (Y-M-D) 1969-12-31 19:00:01 (output timezone TZ=-05:00)
-Wed Dec 31 19:00:01 PET 1969
+Wed Dec 31 19:00:01 -0500 1969
EOF
-TZ=America/Lima date --debug -d "$in3" >out3 2>&1 || fail=1
+TZ=America/Lima date --debug -d "$in3" +'%a %b %e %T %z %Y' >out3 2>&1 || fail=1
compare exp3 out3 || fail=1
##

View File

@ -16,7 +16,7 @@ Index: tests/local.mk
=================================================================== ===================================================================
--- tests/local.mk.orig --- tests/local.mk.orig
+++ tests/local.mk +++ tests/local.mk
@@ -693,14 +693,9 @@ all_tests = \ @@ -701,14 +701,9 @@ all_tests = \
# See tests/factor/create-test.sh. # See tests/factor/create-test.sh.
tf = tests/factor tf = tests/factor
factor_tests = \ factor_tests = \

View File

@ -1,9 +1,26 @@
-------------------------------------------------------------------
Mon Sep 4 18:00:24 UTC 2017 - mail@bernhard-voelker.de
- Update to 8.28
(for details see included NEWS file)
- Refresh patches:
* coreutils-disable_tests.patch
* coreutils-i18n.patch
* coreutils-remove_hostname_documentation.patch
* coreutils-remove_kill_documentation.patch
* coreutils-skip-gnulib-test-tls.patch
* coreutils-tests-shorten-extreme-factor-tests.patch
- coreutils.keyring: Update from upstream (Savannah).
- Remote now-upstream patches:
* coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
* coreutils-tests-port-to-timezone-2017a.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
- Drop coreutils-ocfs2_reflinks.patch - Drop coreutils-ocfs2_reflinks.patch
OCFS2 file system has supported file clone ioctls like btrfs, OCFS2 file system has supported file clone ioctls like btrfs,
then, coreutils doesn't need this patch from the kernel v4.10-rc1 then, coreutils doesn't need this patch from the kernel v4.10-rc1
------------------------------------------------------------------- -------------------------------------------------------------------
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de

View File

@ -21,7 +21,7 @@ Summary: GNU Core Utilities
License: GPL-3.0+ License: GPL-3.0+
Group: System/Base Group: System/Base
Url: http://www.gnu.org/software/coreutils/ Url: http://www.gnu.org/software/coreutils/
Version: 8.27 Version: 8.28
Release: 0 Release: 0
################################################################# #################################################################
@ -126,16 +126,6 @@ Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
Patch500: coreutils-disable_tests.patch Patch500: coreutils-disable_tests.patch
Patch501: coreutils-test_without_valgrind.patch Patch501: coreutils-test_without_valgrind.patch
# Upstream patch on top of coreutils-8.27.
# Avoid a FP of tests/misc/date-debug.sh with newer timezone-2017a.
Patch700: coreutils-tests-port-to-timezone-2017a.patch
# Upstream fix on top of coreutils-v8.27:
# Add upstream patch to fix an heap overflow security issue
# in date(1) and touch(1) with a large TZ variable
# (CVE-2017-7476, rh#1444774, boo#1037124).
Patch710: coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
# ================================================ # ================================================
%description %description
These are the GNU core utilities. This package is the union of These are the GNU core utilities. This package is the union of
@ -177,9 +167,6 @@ the GNU fileutils, sh-utils, and textutils packages.
%patch500 %patch500
%patch501 %patch501
%patch700
%patch710
#???## We need to statically link to gmp, otherwise we have a build loop #???## We need to statically link to gmp, otherwise we have a build loop
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in #???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in

View File

@ -1,9 +1,26 @@
-------------------------------------------------------------------
Mon Sep 4 18:00:24 UTC 2017 - mail@bernhard-voelker.de
- Update to 8.28
(for details see included NEWS file)
- Refresh patches:
* coreutils-disable_tests.patch
* coreutils-i18n.patch
* coreutils-remove_hostname_documentation.patch
* coreutils-remove_kill_documentation.patch
* coreutils-skip-gnulib-test-tls.patch
* coreutils-tests-shorten-extreme-factor-tests.patch
- coreutils.keyring: Update from upstream (Savannah).
- Remote now-upstream patches:
* coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
* coreutils-tests-port-to-timezone-2017a.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
- Drop coreutils-ocfs2_reflinks.patch - Drop coreutils-ocfs2_reflinks.patch
OCFS2 file system has supported file clone ioctls like btrfs, OCFS2 file system has supported file clone ioctls like btrfs,
then, coreutils doesn't need this patch from the kernel v4.10-rc1 then, coreutils doesn't need this patch from the kernel v4.10-rc1
------------------------------------------------------------------- -------------------------------------------------------------------
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de

View File

@ -807,6 +807,36 @@ c+yN4vdeplccZRYyhMi2FOLWGF7GwfmScuHUz/2Fh20LpSWC4I7umRC6YZM43Onj
Nwmjme97uBlV6LYXnlGm1B0= Nwmjme97uBlV6LYXnlGm1B0=
=BG/W =BG/W
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
mQENBFPirzMBCACyzYldTjQ4ufFOkByY5Nn5USb5GFoL48nWBwNHjd9KUbtRRNlQ
iPNKd6hKGvd3BGi5aoFKA4ytfRk6jbAbW3jVb3R8wYaV08mOy4KVEKxqN4bxsXlM
jNChXVR+rtKDmfI+oPTL+cPH2X6gW4W02IRbVw0uUhNm6zEedC/gNrY/mTlf1enZ
46jxZ7BTUZaG+kx38UMISIMBzSzLRtdkwgmHj4jS3p1fF2cwRqLclIfMjKGpbNFP
EXeXKWrCLcqHw78795eAR9q0YvrDkfInGdDBwfb3VM4NdulwIFzvYZMSXvSbbyPL
B5YkHU5aAWQHUse4WlfT5ccDpbzUYldRAvF9ABEBAAG0K0Jlcm5oYXJkIFZvZWxr
ZXIgPG1haWxAYmVybmhhcmQtdm9lbGtlci5kZT6JATkEEwECACMFAlPirzMCGwMH
CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBGUC73lpFxle5wCACCdbs0QaJ0
vR3Sff2cKdTk41rUq3YfWngsR///IOU0C5DdkePmCnJE/lUsUy0LRTxcUDLxQR+x
QHU8ssRT0JUO9726dI3miy36UdsgmBYaOtLvQcidGmW1R7o0PYYf04+TFtyqKgng
OUBPpMgR6o4UsQxy/OD4bN1WDqOgIjL+D/qJpkKmgp6L6+hhaBCpiOFKRmmV7YyQ
3SqVlfQNiHs5ZtkRnXpIjgZARV+GllKucI17bO0CGmTJZ1tstVy0+W3DQT1lbBkT
Tc++5LONM99D3jjn23l1ocOpfolR53F7I4cb2RNfT23v1I59RH37lB9wMOqrKj0U
jYAC2YoPGQ3BuQENBFPirzMBCADXLWWpQihBldY6reca8ZKdc3T9qXEOa3akE3DW
KztIBmNJhtYOjmpLYajQTkGa7UoJTnbmZE2Rn6ZEoNnvb0gcFNAIcY95KOI+bjOR
8HEgh4cx2REXh6L6olIgyXqt/KFusE4wtVZAFxZl+30HzN6nD+1HvrjXxPJRX6Ms
IYOYyyX9/6OofwJK6QHODYGp8WL2olHDnmsXg4AT6Wlr7qKpKrQELlcFR4xkvdmg
L/Ghw/tK0yJTxMIcewCCZWLPOXRmFRbvAadZWPAgVsJ63siNyUlVnVMSzDgTJl+s
l/DMabXpqrJQx3/1Yy6mTaDs3XZT/wmBKaTLXx/LByaPxQQ7ABEBAAGJAR8EGAEC
AAkFAlPirzMCGwwACgkQRlAu95aRcZWVPwgAqZT6iTXkoP37wYb41323RzhBcJ8J
Sk4cyBDBUXX0lMrM3qhiClKG7phpxVdu817Gwc6Hsecg7FfjQAV8MHQ0ZFeEFdk3
b2rKBqfsStc+h49/xF3Fb+ifCzR9qeQF82fMSxkg18++7hMcHCMO/hPZ/Q0xRi+l
rSr2QKDJQuLzSyVU14TxrCkevZjEhtmaVNvcJlJzCbiBXee9Fpc5jITUXPFG8E8d
xqo1n+duOyIMgozrAnzP7X5V/Ob/Ozf/aGGX9+JdinyfCX18nWcHALKMU/36Eua/
ylalf/2c2YkBp9KCLVmGgPkUgW52EeRPgroIsiwu+rwCSV6ZUyCJ+OymCg==
=d/K6
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1 Version: GnuPG v1

View File

@ -21,7 +21,7 @@ Summary: GNU Core Utilities
License: GPL-3.0+ License: GPL-3.0+
Group: System/Base Group: System/Base
Url: http://www.gnu.org/software/coreutils/ Url: http://www.gnu.org/software/coreutils/
Version: 8.27 Version: 8.28
Release: 0 Release: 0
################################################################# #################################################################
@ -126,16 +126,6 @@ Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
Patch500: coreutils-disable_tests.patch Patch500: coreutils-disable_tests.patch
Patch501: coreutils-test_without_valgrind.patch Patch501: coreutils-test_without_valgrind.patch
# Upstream patch on top of coreutils-8.27.
# Avoid a FP of tests/misc/date-debug.sh with newer timezone-2017a.
Patch700: coreutils-tests-port-to-timezone-2017a.patch
# Upstream fix on top of coreutils-v8.27:
# Add upstream patch to fix an heap overflow security issue
# in date(1) and touch(1) with a large TZ variable
# (CVE-2017-7476, rh#1444774, boo#1037124).
Patch710: coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
# ================================================ # ================================================
%description %description
These are the GNU core utilities. This package is the union of These are the GNU core utilities. This package is the union of
@ -177,9 +167,6 @@ the GNU fileutils, sh-utils, and textutils packages.
%patch500 %patch500
%patch501 %patch501
%patch700
%patch710
#???## We need to statically link to gmp, otherwise we have a build loop #???## We need to statically link to gmp, otherwise we have a build loop
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in #???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in