forked from pool/coreutils
Accepting request 521679 from 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). - Remove now-upstream patches: * coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch * coreutils-tests-port-to-timezone-2017a.patch - coreutils.spec: Add "BuildRequires: user(bin)" for the tests. OBS-URL: https://build.opensuse.org/request/show/521679 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/coreutils?expand=0&rev=125
This commit is contained in:
parent
2f9179b5e0
commit
8cb3df9dff
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8891d349ee87b9ff7870f52b6d9312a9db672d2439d289bc57084771ca21656b
|
||||
size 5285648
|
@ -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
3
coreutils-8.28.tar.xz
Normal 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
16
coreutils-8.28.tar.xz.sig
Normal 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-----
|
@ -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
|
@ -1,27 +1,23 @@
|
||||
---
|
||||
gnulib-tests/gnulib.mk | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
gnulib-tests/gnulib.mk | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -893,12 +893,12 @@ EXTRA_DIST += test-getloadavg.c signatur
|
||||
## end gnulib module getloadavg-tests
|
||||
@@ -895,10 +895,10 @@ EXTRA_DIST += test-getloadavg.c signatur
|
||||
|
||||
## begin gnulib module getlogin-tests
|
||||
-
|
||||
|
||||
-TESTS += test-getlogin
|
||||
-check_PROGRAMS += test-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
|
||||
+#check_PROGRAMS += test-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
|
||||
|
||||
## begin gnulib module getndelim2-tests
|
||||
|
@ -41,7 +41,7 @@ Index: bootstrap.conf
|
||||
===================================================================
|
||||
--- bootstrap.conf.orig
|
||||
+++ bootstrap.conf
|
||||
@@ -152,6 +152,7 @@ gnulib_modules="
|
||||
@@ -154,6 +154,7 @@ gnulib_modules="
|
||||
maintainer-makefile
|
||||
malloc-gnu
|
||||
manywarnings
|
||||
@ -53,7 +53,7 @@ Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac.orig
|
||||
+++ 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...
|
||||
gl_WINSIZE_IN_PTEM
|
||||
|
||||
@ -944,15 +944,15 @@ Index: src/expand-common.c
|
||||
===================================================================
|
||||
--- src/expand-common.c.orig
|
||||
+++ src/expand-common.c
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
+#include <mbfile.h>
|
||||
#include "system.h"
|
||||
#include "die.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;
|
||||
}
|
||||
|
||||
@ -1109,7 +1109,7 @@ Index: src/expand.c
|
||||
#include "system.h"
|
||||
#include "die.h"
|
||||
#include "xstrndup.h"
|
||||
@@ -100,19 +103,41 @@ expand (void)
|
||||
@@ -98,19 +101,41 @@ expand (void)
|
||||
{
|
||||
/* Input stream. */
|
||||
FILE *fp = next_file (NULL);
|
||||
@ -1155,7 +1155,7 @@ Index: src/expand.c
|
||||
/* The following variables have valid values only when CONVERT
|
||||
is true: */
|
||||
|
||||
@@ -122,17 +147,48 @@ expand (void)
|
||||
@@ -120,17 +145,48 @@ expand (void)
|
||||
/* Index in TAB_LIST of next tab stop to examine. */
|
||||
size_t tab_index = 0;
|
||||
|
||||
@ -1208,7 +1208,7 @@ Index: src/expand.c
|
||||
{
|
||||
/* Column the next input tab stop is on. */
|
||||
uintmax_t next_tab_column;
|
||||
@@ -151,32 +207,34 @@ expand (void)
|
||||
@@ -149,32 +205,34 @@ expand (void)
|
||||
if (putchar (' ') < 0)
|
||||
die (EXIT_FAILURE, errno, _("write error"));
|
||||
|
||||
@ -2043,7 +2043,7 @@ Index: src/join.c
|
||||
xfields (line);
|
||||
|
||||
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. */
|
||||
|
||||
@ -2075,7 +2075,7 @@ Index: src/join.c
|
||||
prfield (i, line);
|
||||
}
|
||||
}
|
||||
@@ -592,7 +839,6 @@ static void
|
||||
@@ -588,7 +835,6 @@ static void
|
||||
prjoin (struct line const *line1, struct line const *line2)
|
||||
{
|
||||
const struct outlist *outlist;
|
||||
@ -2083,7 +2083,7 @@ Index: src/join.c
|
||||
size_t field;
|
||||
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;
|
||||
if (o == NULL)
|
||||
break;
|
||||
@ -2092,7 +2092,7 @@ Index: src/join.c
|
||||
}
|
||||
putchar (eolchar);
|
||||
}
|
||||
@@ -1104,20 +1350,43 @@ main (int argc, char **argv)
|
||||
@@ -1099,20 +1345,43 @@ main (int argc, char **argv)
|
||||
|
||||
case 't':
|
||||
{
|
||||
@ -2369,7 +2369,7 @@ Index: src/pr.c
|
||||
use_col_separator = true;
|
||||
if (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. */
|
||||
|
||||
static void
|
||||
@ -2417,7 +2417,7 @@ Index: src/pr.c
|
||||
if (*arg)
|
||||
{
|
||||
long int tmp_long;
|
||||
@@ -1191,6 +1310,11 @@ static void
|
||||
@@ -1190,6 +1309,11 @@ static void
|
||||
init_parameters (int number_of_files)
|
||||
{
|
||||
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;
|
||||
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
|
||||
col_sep_string = column_separator;
|
||||
|
||||
@ -2438,7 +2438,7 @@ Index: src/pr.c
|
||||
use_col_separator = true;
|
||||
}
|
||||
/* 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); */
|
||||
|
||||
/* 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
|
||||
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;
|
||||
@ -2461,7 +2461,7 @@ Index: src/pr.c
|
||||
sep_chars = INT_MAX;
|
||||
if (INT_SUBTRACT_WRAPV (chars_per_line - chars_used_by_number, sep_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
|
||||
to expand a tab which is not an input_tab-char. */
|
||||
free (clump_buff);
|
||||
@ -2470,7 +2470,7 @@ Index: src/pr.c
|
||||
}
|
||||
|
||||
/* 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
|
||||
padding_not_printed with all columns. */
|
||||
@ -2479,7 +2479,7 @@ Index: src/pr.c
|
||||
|
||||
/* 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
|
||||
{
|
||||
@ -2488,7 +2488,7 @@ Index: src/pr.c
|
||||
h_next = h + chars_per_column;
|
||||
}
|
||||
}
|
||||
@@ -1727,9 +1851,9 @@ static void
|
||||
@@ -1724,9 +1848,9 @@ static void
|
||||
align_column (COLUMN *p)
|
||||
{
|
||||
padding_not_printed = p->start_position;
|
||||
@ -2500,7 +2500,7 @@ Index: src/pr.c
|
||||
padding_not_printed = ANYWHERE;
|
||||
}
|
||||
|
||||
@@ -2004,13 +2128,13 @@ store_char (char c)
|
||||
@@ -2001,13 +2125,13 @@ store_char (char c)
|
||||
/* May be too generous. */
|
||||
buff = X2REALLOC (buff, &buff_allocated);
|
||||
}
|
||||
@ -2516,7 +2516,7 @@ Index: src/pr.c
|
||||
char *s;
|
||||
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,
|
||||
but 'default n-separator = TAB' hasn't been given priority over
|
||||
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);
|
||||
}
|
||||
@@ -2203,7 +2329,7 @@ print_white_space (void)
|
||||
@@ -2198,7 +2324,7 @@ print_white_space (void)
|
||||
while (goal - h_old > 1
|
||||
&& (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
|
||||
{
|
||||
@ -2554,7 +2554,7 @@ Index: src/pr.c
|
||||
h_old = h_new;
|
||||
}
|
||||
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;
|
||||
int l = col_sep_length;
|
||||
@ -2562,7 +2562,7 @@ Index: src/pr.c
|
||||
|
||||
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)
|
||||
{
|
||||
@ -2570,7 +2570,7 @@ Index: src/pr.c
|
||||
while (l-- > 0)
|
||||
{
|
||||
/* 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
|
||||
{
|
||||
@ -2587,7 +2587,7 @@ Index: src/pr.c
|
||||
/* sep_string ends with some spaces */
|
||||
if (spaces_not_printed > 0)
|
||||
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. */
|
||||
|
||||
static void
|
||||
@ -2596,7 +2596,7 @@ Index: src/pr.c
|
||||
{
|
||||
if (tabify_output)
|
||||
{
|
||||
@@ -2304,6 +2435,74 @@ print_char (char c)
|
||||
@@ -2299,6 +2430,74 @@ print_char (char c)
|
||||
putchar (c);
|
||||
}
|
||||
|
||||
@ -2671,7 +2671,7 @@ Index: src/pr.c
|
||||
/* Skip to page PAGE before printing.
|
||||
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;
|
||||
}
|
||||
|
||||
@ -2683,8 +2683,8 @@ Index: src/pr.c
|
||||
padding_not_printed = ANYWHERE;
|
||||
}
|
||||
|
||||
@@ -2555,7 +2754,7 @@ print_stored (COLUMN *p)
|
||||
int i;
|
||||
@@ -2547,7 +2746,7 @@ print_stored (COLUMN *p)
|
||||
COLUMN *q;
|
||||
|
||||
int line = p->current_line++;
|
||||
- char *first = &buff[line_vector[line]];
|
||||
@ -2692,7 +2692,7 @@ Index: src/pr.c
|
||||
/* FIXME
|
||||
UMR: Uninitialized memory read:
|
||||
* 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]
|
||||
init_store_cols [pr.c:1648]
|
||||
*/
|
||||
@ -2701,7 +2701,7 @@ Index: src/pr.c
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -2601,8 +2800,8 @@ print_stored (COLUMN *p)
|
||||
@@ -2594,8 +2793,8 @@ print_stored (COLUMN *p)
|
||||
if (spaces_not_printed == 0)
|
||||
{
|
||||
output_position = p->start_position + end_vector[line];
|
||||
@ -2724,7 +2724,7 @@ Index: src/pr.c
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2621,7 +2820,7 @@ print_stored (COLUMN *p)
|
||||
@@ -2614,7 +2813,7 @@ print_stored (COLUMN *p)
|
||||
number of characters is 1.) */
|
||||
|
||||
static int
|
||||
@ -2733,7 +2733,7 @@ Index: src/pr.c
|
||||
{
|
||||
unsigned char uc = c;
|
||||
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_per_c = 8;
|
||||
|
||||
@ -2746,7 +2746,7 @@ Index: src/pr.c
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -2930,7 +2930,7 @@ Index: src/sort.c
|
||||
#include "system.h"
|
||||
#include "argmatch.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. */
|
||||
static int thousands_sep;
|
||||
|
||||
@ -2971,7 +2971,7 @@ Index: src/sort.c
|
||||
/* The kind of blanks for '-b' to skip in various options. */
|
||||
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. */
|
||||
static bool stable;
|
||||
|
||||
@ -2988,7 +2988,7 @@ Index: src/sort.c
|
||||
|
||||
/* Flag to remove consecutive duplicate lines from the 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);
|
||||
}
|
||||
|
||||
@ -3035,7 +3035,7 @@ Index: src/sort.c
|
||||
/* Clean up any remaining temporary files. */
|
||||
|
||||
static void
|
||||
@@ -1255,7 +1326,7 @@ zaptemp (char const *name)
|
||||
@@ -1264,7 +1335,7 @@ zaptemp (char const *name)
|
||||
free (node);
|
||||
}
|
||||
|
||||
@ -3044,7 +3044,7 @@ Index: src/sort.c
|
||||
|
||||
static int
|
||||
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. */
|
||||
|
||||
static void
|
||||
@ -3053,7 +3053,7 @@ Index: src/sort.c
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@@ -1282,7 +1353,7 @@ inittables (void)
|
||||
@@ -1291,7 +1362,7 @@ inittables (void)
|
||||
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 (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);
|
||||
}
|
||||
|
||||
@ -3147,7 +3147,7 @@ Index: src/sort.c
|
||||
/* Specify the amount of main memory to use when sorting. */
|
||||
static void
|
||||
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. */
|
||||
|
||||
static char *
|
||||
@ -3156,7 +3156,7 @@ Index: src/sort.c
|
||||
{
|
||||
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||
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
|
||||
is absent. */
|
||||
|
||||
@ -3169,7 +3169,7 @@ Index: src/sort.c
|
||||
++ptr;
|
||||
if (ptr < lim)
|
||||
++ptr;
|
||||
@@ -1635,11 +1784,70 @@ begfield (struct line const *line, struc
|
||||
@@ -1642,11 +1791,70 @@ begfield (struct line const *line, struc
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@ -3241,7 +3241,7 @@ Index: src/sort.c
|
||||
{
|
||||
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||
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.
|
||||
Otherwise, leave PTR pointing at the first 'blank' character after
|
||||
the preceding field. */
|
||||
@ -3254,7 +3254,7 @@ Index: src/sort.c
|
||||
++ptr;
|
||||
if (ptr < lim && (eword || echar))
|
||||
++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. */
|
||||
@ -3267,7 +3267,7 @@ Index: src/sort.c
|
||||
if (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;
|
||||
}
|
||||
|
||||
@ -3398,7 +3398,7 @@ Index: src/sort.c
|
||||
/* 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
|
||||
@@ -1823,8 +2155,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
|
||||
@@ -1830,8 +2162,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
|
||||
else
|
||||
{
|
||||
if (key->skipsblanks)
|
||||
@ -3423,7 +3423,7 @@ Index: src/sort.c
|
||||
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 */
|
||||
|
||||
static int
|
||||
@ -3439,7 +3439,7 @@ Index: src/sort.c
|
||||
|
||||
int diff = find_unit_order (a) - find_unit_order (b);
|
||||
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. */
|
||||
|
||||
static int
|
||||
@ -3448,7 +3448,7 @@ Index: src/sort.c
|
||||
{
|
||||
while (blanks[to_uchar (*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);
|
||||
}
|
||||
|
||||
@ -3474,7 +3474,7 @@ Index: src/sort.c
|
||||
/* Work around a problem whereby the long double value returned by glibc's
|
||||
strtold ("NaN", ...) contains uninitialized bits: clear all bytes of
|
||||
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. */
|
||||
|
||||
static int
|
||||
@ -3483,7 +3483,7 @@ Index: src/sort.c
|
||||
{
|
||||
size_t lo = 0;
|
||||
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;
|
||||
*lim = '\0';
|
||||
|
||||
@ -3501,7 +3501,7 @@ Index: src/sort.c
|
||||
else if (key->general_numeric)
|
||||
ignore_value (strtold (beg, &tighter_lim));
|
||||
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. */
|
||||
bool implicit_skip = key_numeric (key) || key->month;
|
||||
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 && key->schar)
|
||||
|| (!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"));
|
||||
}
|
||||
|
||||
@ -3599,7 +3599,7 @@ Index: src/sort.c
|
||||
{
|
||||
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)
|
||||
diff = human_numcompare (ta, tb);
|
||||
else if (key->month)
|
||||
@ -3608,7 +3608,7 @@ Index: src/sort.c
|
||||
else if (key->random)
|
||||
diff = compare_random (ta, tlena, tb, tlenb);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -3820,16 +3820,16 @@ Index: src/sort.c
|
||||
/* Compare two lines A and B, returning negative, zero, or positive
|
||||
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);
|
||||
else if (blen == 0)
|
||||
diff = 1;
|
||||
- else if (hard_LC_COLLATE)
|
||||
+ 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
|
||||
@@ -4139,6 +4782,7 @@ set_ordering (char const *s, struct keyf
|
||||
@@ -4144,6 +4787,7 @@ set_ordering (char const *s, struct keyf
|
||||
break;
|
||||
case 'f':
|
||||
key->translate = fold_toupper;
|
||||
@ -3837,7 +3837,7 @@ Index: src/sort.c
|
||||
break;
|
||||
case 'g':
|
||||
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);
|
||||
|
||||
hard_LC_COLLATE = hard_locale (LC_COLLATE);
|
||||
@ -3846,7 +3846,7 @@ Index: src/sort.c
|
||||
hard_LC_TIME = hard_locale (LC_TIME);
|
||||
#endif
|
||||
|
||||
@@ -4239,6 +4883,29 @@ main (int argc, char **argv)
|
||||
@@ -4244,6 +4888,29 @@ main (int argc, char **argv)
|
||||
thousands_sep = -1;
|
||||
}
|
||||
|
||||
@ -3876,7 +3876,7 @@ Index: src/sort.c
|
||||
have_read_stdin = false;
|
||||
inittables ();
|
||||
|
||||
@@ -4513,13 +5180,34 @@ main (int argc, char **argv)
|
||||
@@ -4518,13 +5185,34 @@ main (int argc, char **argv)
|
||||
|
||||
case 't':
|
||||
{
|
||||
@ -3915,7 +3915,7 @@ Index: src/sort.c
|
||||
else
|
||||
{
|
||||
/* 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));
|
||||
}
|
||||
}
|
||||
@ -3929,7 +3929,7 @@ Index: src/sort.c
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4770,12 +5460,10 @@ main (int argc, char **argv)
|
||||
@@ -4765,12 +5455,10 @@ main (int argc, char **argv)
|
||||
sort (files, nfiles, outfile, nthreads);
|
||||
}
|
||||
|
||||
@ -4763,7 +4763,7 @@ Index: tests/local.mk
|
||||
===================================================================
|
||||
--- tests/local.mk.orig
|
||||
+++ tests/local.mk
|
||||
@@ -352,6 +352,8 @@ all_tests = \
|
||||
@@ -357,6 +357,8 @@ all_tests = \
|
||||
tests/misc/sort-discrim.sh \
|
||||
tests/misc/sort-files0-from.pl \
|
||||
tests/misc/sort-float.sh \
|
||||
@ -4772,7 +4772,7 @@ Index: tests/local.mk
|
||||
tests/misc/sort-h-thousands-sep.sh \
|
||||
tests/misc/sort-merge.pl \
|
||||
tests/misc/sort-merge-fdlimit.sh \
|
||||
@@ -544,6 +546,7 @@ all_tests = \
|
||||
@@ -550,6 +552,7 @@ all_tests = \
|
||||
tests/du/threshold.sh \
|
||||
tests/du/trailing-slash.sh \
|
||||
tests/du/two-args.sh \
|
||||
@ -4780,7 +4780,7 @@ Index: tests/local.mk
|
||||
tests/id/gnu-zero-uids.sh \
|
||||
tests/id/no-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/relative.sh \
|
||||
tests/touch/trailing-slash.sh \
|
||||
@ -4834,8 +4834,8 @@ Index: tests/misc/expand.pl
|
||||
my @Tests =
|
||||
(
|
||||
['t1', '--tabs=3', {IN=>"a\tb"}, {OUT=>"a b"}],
|
||||
@@ -152,6 +161,8 @@ my @Tests =
|
||||
['trail9', '--tab=1,2 -t/5',{IN=>"\ta\tb\tc"}, {OUT=>" a b c"}],
|
||||
@@ -168,6 +177,8 @@ my @Tests =
|
||||
|
||||
|
||||
# Test errors
|
||||
+ # 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},
|
||||
{ERR => "$prog: tab size contains invalid character(s): 'a'\n"}],
|
||||
['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"}],
|
||||
);
|
||||
|
||||
|
@ -31,7 +31,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier
|
||||
* uptime invocation:: Print system uptime and load
|
||||
|
||||
@@ -15422,7 +15420,6 @@ information.
|
||||
@@ -15515,7 +15513,6 @@ information.
|
||||
* arch invocation:: Print machine hardware name.
|
||||
* nproc invocation:: Print the number of processors.
|
||||
* uname invocation:: Print system information.
|
||||
@ -39,7 +39,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier.
|
||||
* uptime invocation:: Print system uptime and load.
|
||||
@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
|
||||
or hardware type).
|
||||
|
||||
@ -55,7 +55,7 @@ Index: doc/coreutils.texi
|
||||
@item -p
|
||||
@itemx --processor
|
||||
@opindex -p
|
||||
@@ -16328,34 +16316,6 @@ Print the kernel version.
|
||||
@@ -16421,34 +16409,6 @@ Print the kernel version.
|
||||
|
||||
@exitstatus
|
||||
|
||||
|
@ -33,7 +33,7 @@ Index: doc/coreutils.texi
|
||||
Delaying
|
||||
|
||||
* 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
|
||||
|
||||
|
||||
|
@ -21,7 +21,7 @@ Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ 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
|
||||
|
||||
|
@ -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
|
||||
|
||||
##
|
@ -16,7 +16,7 @@ Index: tests/local.mk
|
||||
===================================================================
|
||||
--- tests/local.mk.orig
|
||||
+++ tests/local.mk
|
||||
@@ -693,14 +693,9 @@ all_tests = \
|
||||
@@ -701,14 +701,9 @@ all_tests = \
|
||||
# See tests/factor/create-test.sh.
|
||||
tf = tests/factor
|
||||
factor_tests = \
|
||||
|
@ -1,9 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
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).
|
||||
- Remove now-upstream patches:
|
||||
* coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
|
||||
* coreutils-tests-port-to-timezone-2017a.patch
|
||||
- coreutils.spec: Add "BuildRequires: user(bin)" for the tests.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
|
||||
|
||||
- Drop coreutils-ocfs2_reflinks.patch
|
||||
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
|
||||
|
@ -21,7 +21,7 @@ Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.27
|
||||
Version: 8.28
|
||||
Release: 0
|
||||
|
||||
#################################################################
|
||||
@ -53,6 +53,8 @@ BuildRequires: perl-Expect
|
||||
BuildRequires: python-pyinotify
|
||||
BuildRequires: strace
|
||||
BuildRequires: timezone
|
||||
# Some tests need the 'bin' user.
|
||||
BuildRequires: user(bin)
|
||||
%ifarch %ix86 x86_64 ppc ppc64 s390x armv7l armv7hl
|
||||
BuildRequires: valgrind
|
||||
%endif
|
||||
@ -126,16 +128,6 @@ Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
Patch500: coreutils-disable_tests.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
|
||||
These are the GNU core utilities. This package is the union of
|
||||
@ -177,9 +169,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%patch500
|
||||
%patch501
|
||||
|
||||
%patch700
|
||||
%patch710
|
||||
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
||||
|
@ -1,9 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
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).
|
||||
- Remove now-upstream patches:
|
||||
* coreutils-cve-2017-7476-out-of-bounds-with-large-tz.patch
|
||||
* coreutils-tests-port-to-timezone-2017a.patch
|
||||
- coreutils.spec: Add "BuildRequires: user(bin)" for the tests.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
|
||||
|
||||
- Drop coreutils-ocfs2_reflinks.patch
|
||||
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
|
||||
|
@ -807,6 +807,36 @@ c+yN4vdeplccZRYyhMi2FOLWGF7GwfmScuHUz/2Fh20LpSWC4I7umRC6YZM43Onj
|
||||
Nwmjme97uBlV6LYXnlGm1B0=
|
||||
=BG/W
|
||||
-----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-----
|
||||
Version: GnuPG v1
|
||||
|
@ -21,7 +21,7 @@ Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.27
|
||||
Version: 8.28
|
||||
Release: 0
|
||||
|
||||
#################################################################
|
||||
@ -53,6 +53,8 @@ BuildRequires: perl-Expect
|
||||
BuildRequires: python-pyinotify
|
||||
BuildRequires: strace
|
||||
BuildRequires: timezone
|
||||
# Some tests need the 'bin' user.
|
||||
BuildRequires: user(bin)
|
||||
%ifarch %ix86 x86_64 ppc ppc64 s390x armv7l armv7hl
|
||||
BuildRequires: valgrind
|
||||
%endif
|
||||
@ -126,16 +128,6 @@ Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
Patch500: coreutils-disable_tests.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
|
||||
These are the GNU core utilities. This package is the union of
|
||||
@ -177,9 +169,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%patch500
|
||||
%patch501
|
||||
|
||||
%patch700
|
||||
%patch710
|
||||
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user