On 11/08/17 11:49, A. Wilcox wrote: > FAIL: tests/misc/csplit-io-err > ============================== This was due to an inconsistency in the errors output by seq. A fix for that buglet is attached.
> FAIL: tests/misc/printf-surprise > ================================ Depending on exit 141 couples the script to the value of SIGPIPE and to the shell implementation (ksh will return 269 here for e.g.). So I've attached a solution that should hopefully work in all situations. > FAIL: tests/misc/sort-debug-warn > ================================ This was due to an assumption that for "missing" locales that sort would fail to C rather than C.UTF8. I've adjusted sort to not assume that in the attached. thanks, Pádraig
From 1e1dbbe0f95c7170009f3ba4d8380c1b98ff53c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Sun, 13 Aug 2017 00:18:43 -0700 Subject: [PATCH] seq: produce consistent error messages upon write error * src/seq.c (io_error): Use the same error message as would be generated at exit time when closing the stdout stream. The inconsistency was added with commit v8.25-26-gc92585b. This was noticed due to an inconsistency in the expected error message generated by seq on musl libc. Reported by A. Wilcox. --- src/seq.c | 2 +- tests/misc/seq-epipe.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/seq.c b/src/seq.c index bb191ba..5e5b381 100644 --- a/src/seq.c +++ b/src/seq.c @@ -284,7 +284,7 @@ io_error (void) { /* FIXME: consider option to silently ignore errno=EPIPE */ clearerr (stdout); - die (EXIT_FAILURE, errno, _("standard output")); + die (EXIT_FAILURE, errno, _("write error")); } /* Actually print the sequence of numbers in the specified range, with the diff --git a/tests/misc/seq-epipe.sh b/tests/misc/seq-epipe.sh index edbd563..69dd75d 100755 --- a/tests/misc/seq-epipe.sh +++ b/tests/misc/seq-epipe.sh @@ -33,7 +33,7 @@ compare exp code || fail=1 # The error message must begin with "standard output:" # (but don't hard-code the strerror text) -grep '^seq: standard output: ' err \ +grep '^seq: write error: ' err \ || { warn_ "seq emitted incorrect error on EPIPE"; \ cat err;\ fail=1; } -- 2.9.3
From ad5c14dcadd4603363e68da960ed0101b61439bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Sat, 12 Aug 2017 23:53:33 -0700 Subject: [PATCH] tests: fix false failure with large printf formats * tests/misc/printf-surprise.sh: With musl libc the large printf format does succeed, outputting data. To avoid SIGPIPE being generated we ignore that signal and then handle the subsequent EPIPE error. Reported by A. Wilcox --- tests/misc/printf-surprise.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/misc/printf-surprise.sh b/tests/misc/printf-surprise.sh index 2edd34c..46c0d8f 100755 --- a/tests/misc/printf-surprise.sh +++ b/tests/misc/printf-surprise.sh @@ -50,6 +50,9 @@ vm=$(get_min_ulimit_v_ env $prog %20f 0) \ mkfifo_or_skip_ fifo +(trap '' PIPE && yes | :) 2>&1 | grep -qF 'Broken pipe' || + skip_ 'trapping SIGPIPE is not supported' + # Disable MALLOC_PERTURB_, to avoid triggering this bug # https://bugs.debian.org/481543#77 export MALLOC_PERTURB_=0 @@ -60,11 +63,11 @@ cleanup_() { kill $pid 2>/dev/null && wait $pid; } head -c 10 fifo > out & pid=$! # Trigger large mem allocation failure -( ulimit -v $vm && env $prog %20000000f 0 2>err-msg > fifo ) +( trap '' PIPE && ulimit -v $vm && env $prog %20000000f 0 2>err-msg > fifo ) exit=$? # Map this longer, and rarer, diagnostic to the common one. -# printf: cannot perform formatted output: Cannot allocate memory" \ +# printf: cannot perform formatted output: Cannot allocate memory" sed 's/cannot perform .*/write error/' err-msg > k && mv k err-msg err_msg=$(tr '\n' : < err-msg) @@ -81,6 +84,7 @@ n_out=$(wc -c < out) case $n_out:$diagnostic:$exit in 10:n:0) ;; # ok, succeeds w/no diagnostic: FreeBSD 6.1 + 10:y:1) ;; # ok, fails with EPIPE diagnostic: musl libc 0:y:1) ;; # ok, glibc-2.8 and newer, when printf(3) fails with ENOMEM # With MALLOC_PERTURB_=0, this no longer happens. -- 2.9.3
From b938d8966c3d1afec9730d403fd6a6eb4d856b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Sun, 13 Aug 2017 00:45:32 -0700 Subject: [PATCH] sort: handle musl locale differences in --debug reporting * src/sort.c (main): Don't assume hard_LC_COLLATE implies a successful setting of the locale as musl defaults to UTF8 when failing to set the specified locale. * tests/misc/sort-debug-warn.sh: Adjust for the now separated locale debug info and map the musl specific message back to the common case. Reported by A. Wilcox. --- src/sort.c | 17 +++++++++-------- tests/misc/sort-debug-warn.sh | 9 +++++++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/sort.c b/src/sort.c index 015e40e..ba6ceac 100644 --- a/src/sort.c +++ b/src/sort.c @@ -4675,18 +4675,19 @@ main (int argc, char **argv) /* Always output the locale in debug mode, since this is such a common source of confusion. */ + + /* OpenBSD can only set some categories with LC_ALL above, + so set LC_COLLATE explicitly to flag errors. */ + if (locale_ok) + locale_ok = !! setlocale (LC_COLLATE, ""); + if (! locale_ok) + error (0, 0, "%s", _("failed to set locale")); if (hard_LC_COLLATE) error (0, 0, _("using %s sorting rules"), quote (setlocale (LC_COLLATE, NULL))); else - { - /* OpenBSD can only set some categories with LC_ALL above, - so set LC_COLLATE explicitly to flag errors. */ - if (locale_ok) - locale_ok = !! setlocale (LC_COLLATE, ""); - error (0, 0, "%s%s", locale_ok ? "" : _("failed to set locale; "), - _("using simple byte comparison")); - } + error (0, 0, "%s", _("using simple byte comparison")); + key_warnings (&gkey, gkey_only); } diff --git a/tests/misc/sort-debug-warn.sh b/tests/misc/sort-debug-warn.sh index 3602c84..8119693 100755 --- a/tests/misc/sort-debug-warn.sh +++ b/tests/misc/sort-debug-warn.sh @@ -71,7 +71,8 @@ sort: using simple byte comparison 17 sort: using simple byte comparison 18 -sort: failed to set locale; using simple byte comparison +sort: failed to set locale +sort: using simple byte comparison EOF echo 1 >> out @@ -109,7 +110,11 @@ sort -rM --debug /dev/null 2>>out #no warning echo 17 >> out sort -rM -k1,1 --debug /dev/null 2>>out #no warning echo 18 >> out -LC_ALL=missing sort --debug /dev/null 2>>out +LC_ALL=missing sort --debug /dev/null 2>>out.t +# musl libc accepts "missing" and implicitly uses UTF8, +# so adjust the expected message accordingly. +sed 's/using .*missing.* sorting rules/using simple byte comparison/' \ + out.t >>out compare exp out || fail=1 -- 2.9.3
