From 055b08ff7853c7c9ab791643047b1b163a227013 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Tue, 22 Nov 2016 01:23:22 +0000
Subject: [PATCH] tests: fix false fails due to passing env vars to returns_
On BSD /bin/sh it was seen that unexported env vars passed to
returns_() would not be propagated to the wrapped command.
* cfg.mk (sc_prohibit_env_returns): Add a syntax check to disallow.
* tests/misc/csplit-io-err.sh: Rearrange to export vars in a subshell.
* tests/rm/rm-readdir-fail.sh: Likewise.
* tests/misc/nohup.sh: Export and unset vars around returns_.
* tests/misc/printenv.sh: Likewise.
Reported by Assaf Gordon
---
cfg.mk | 8 ++++++++
tests/misc/csplit-io-err.sh | 6 +++---
tests/misc/nohup.sh | 4 +++-
tests/misc/printenv.sh | 6 ++++--
tests/rm/rm-readdir-fail.sh | 3 ++-
5 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/cfg.mk b/cfg.mk
index 5d42bf14ef..9e4f8a31a7 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -510,6 +510,14 @@ sc_prohibit_and_fail_1:
in_vc_files='^tests/' \
$(_sc_search_regexp)
+# Ensure that env vars are not passed through returns_ as
+# that was seen to fail on FreeBSD /bin/sh at least
+sc_prohibit_env_returns:
+ @prohibit='=[^ ]* returns_ ' \
+ halt='Passing env vars to returns_ is non portable' \
+ in_vc_files='^tests/' \
+ $(_sc_search_regexp)
+
# The mode part of a setfacl -m option argument must be three bytes long.
# I.e., an argument of user:bin:rw or user:bin:r will make Solaris 10's
# setfacl reject it with: "Unrecognized character found in mode field".
diff --git a/tests/misc/csplit-io-err.sh b/tests/misc/csplit-io-err.sh
index 982df161f8..900e38bee7 100755
--- a/tests/misc/csplit-io-err.sh
+++ b/tests/misc/csplit-io-err.sh
@@ -66,9 +66,9 @@ gcc_shared_ k.c k.so \
# Split the input, and force fwrite() failure -
# the 'csplit' command should fail with exit code 1
# (checked with 'returns_ 1 ... || fail=1')
-seq 10 \
- | LD_PRELOAD=$LD_PRELOAD:./k.so returns_ 1 csplit - 1 4 2>out \
- || fail=1
+seq 10 |
+(export LD_PRELOAD=$LD_PRELOAD:./k.so
+ returns_ 1 csplit - 1 4 2>out) || fail=1
test -e preloaded || skip_ 'LD_PRELOAD interception failed'
diff --git a/tests/misc/nohup.sh b/tests/misc/nohup.sh
index e9c8c389ae..1b43b606f0 100755
--- a/tests/misc/nohup.sh
+++ b/tests/misc/nohup.sh
@@ -118,6 +118,8 @@ EOF
# Make sure it fails with exit status of 125 when given too few arguments,
# except that POSIX requires 127 in this case.
returns_ 125 nohup >/dev/null 2>&1 || fail=1
-POSIXLY_CORRECT=1 returns_ 127 nohup >/dev/null 2>&1 || fail=1
+export POSIXLY_CORRECT=1
+returns_ 127 nohup >/dev/null 2>&1 || fail=1
+unset POSIXLY_CORRECT
Exit $fail
diff --git a/tests/misc/printenv.sh b/tests/misc/printenv.sh
index 2017e5df66..b33c0292c0 100755
--- a/tests/misc/printenv.sh
+++ b/tests/misc/printenv.sh
@@ -59,8 +59,10 @@ EOF
compare exp out || fail=1
# Exit status reflects missing variable, but remaining arguments processed.
-ENV_TEST1=a returns_ 1 env -- printenv ENV_TEST2 ENV_TEST1 > out || fail=1
-ENV_TEST1=a returns_ 1 env -- printenv ENV_TEST1 ENV_TEST2 >> out || fail=1
+export ENV_TEST1=a
+returns_ 1 env -- printenv ENV_TEST2 ENV_TEST1 > out || fail=1
+returns_ 1 env -- printenv ENV_TEST1 ENV_TEST2 >> out || fail=1
+unset ENV_TEST1
cat <