From 1d4289b3c10f5d8002fd59a518fbb7b148794449 Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Fri, 3 Jul 2015 04:44:05 +0100 Subject: tests: avoid side effects of $SHELL environment variable Since non interactive shells don't generally set $SHELL, its value is propagated through the tests and may cause issues; for example if $SHELL implicitly adjusts $PATH when run. Instead we set $SHELL to that determined by the posix-shell module, and use that consistently for all test sub scripts, including those created thorugh the `split --filter` command. * tests/local.mk: Explicitly set $SHELL to $(PREFERABLY_POSIX_SHELL) which defaults to $CONFIG_SHELL and thus usually /bin/sh. * tests/envvar-check: Remove bash environment variables with side effects, in case /bin/bash was selected for $SHELL. * tests/misc/help-version.sh: Remove redundant initialization of $SHELL. * tests/install/strip-program.sh: Use $SHELL for sub script. * tests/misc/sort-compress-hang.sh: Likewise. * tests/misc/sort-compress-proc.sh: Likewise. * tests/misc/sort-compress.sh: Likewise. * tests/misc/timeout-group.sh: Likewise. * tests/rm/fail-eperm.xpl: Remove redundant elision of bash env vars. * tests/misc/pwd-long.sh: Likewise. --- tests/envvar-check | 2 ++ tests/install/strip-program.sh | 2 +- tests/local.mk | 2 +- tests/misc/help-version.sh | 6 ------ tests/misc/pwd-long.sh | 1 - tests/misc/sort-compress-hang.sh | 4 ++-- tests/misc/sort-compress-proc.sh | 5 +++-- tests/misc/sort-compress.sh | 4 ++-- tests/misc/timeout-group.sh | 8 ++++---- tests/rm/fail-eperm.xpl | 1 - 10 files changed, 15 insertions(+), 20 deletions(-) diff --git a/tests/envvar-check b/tests/envvar-check index 76becbf4b..28d95f305 100644 --- a/tests/envvar-check +++ b/tests/envvar-check @@ -28,12 +28,14 @@ vars=' _STDBUF_E _STDBUF_I _STDBUF_O + BASH_ENV BLOCKSIZE BLOCK_SIZE CDPATH COLUMNS DF_BLOCK_SIZE DU_BLOCK_SIZE + ENV LANGUAGE LS_BLOCK_SIZE LS_COLORS diff --git a/tests/install/strip-program.sh b/tests/install/strip-program.sh index 7ac2165ea..103f54943 100755 --- a/tests/install/strip-program.sh +++ b/tests/install/strip-program.sh @@ -22,7 +22,7 @@ print_ver_ ginstall working_umask_or_skip_ cat < b || framework_failure_ -#!$PREFERABLY_POSIX_SHELL +#!$SHELL sed s/b/B/ \$1 > \$1.t && mv \$1.t \$1 EOF chmod a+x b || framework_failure_ diff --git a/tests/local.mk b/tests/local.mk index 3cd8f92c6..7df04dac1 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -79,7 +79,7 @@ TESTS_ENVIRONMENT = \ MAKE=$(MAKE) \ PACKAGE_VERSION=$(PACKAGE_VERSION) \ PERL='$(PERL)' \ - PREFERABLY_POSIX_SHELL='$(PREFERABLY_POSIX_SHELL)' \ + SHELL='$(PREFERABLY_POSIX_SHELL)' \ ; test -d /usr/xpg4/bin && PATH='/usr/xpg4/bin$(PATH_SEPARATOR)'"$$PATH"; \ PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" \ ; 9>&2 diff --git a/tests/misc/help-version.sh b/tests/misc/help-version.sh index e0dd721f9..78150374d 100755 --- a/tests/misc/help-version.sh +++ b/tests/misc/help-version.sh @@ -17,12 +17,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Ensure that $SHELL is set to *some* value and exported. -# This is required for dircolors, which would fail e.g., when -# invoked via debuild (which removes SHELL from the environment). -test "x$SHELL" = x && SHELL=/bin/sh -export SHELL - . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src # Terminate any background processes diff --git a/tests/misc/pwd-long.sh b/tests/misc/pwd-long.sh index 927fdcff2..3ced777ae 100755 --- a/tests/misc/pwd-long.sh +++ b/tests/misc/pwd-long.sh @@ -56,7 +56,6 @@ sub normalize_to_cwd_relative ($$$) } # Set up a safe, well-known environment -delete @ENV{qw(BASH_ENV CDPATH ENV)}; $ENV{IFS} = ''; # Taint checking requires a sanitized $PATH. This script performs no $PATH diff --git a/tests/misc/sort-compress-hang.sh b/tests/misc/sort-compress-hang.sh index 9cfd6cc90..dc101fea8 100755 --- a/tests/misc/sort-compress-hang.sh +++ b/tests/misc/sort-compress-hang.sh @@ -20,8 +20,8 @@ print_ver_ sort very_expensive_ -cat <<\EOF >compress || framework_failure_ -#!/bin/sh +cat <compress || framework_failure_ +#!$SHELL tr 41 14 || exit touch ok EOF diff --git a/tests/misc/sort-compress-proc.sh b/tests/misc/sort-compress-proc.sh index 4ad42d514..05017a54f 100755 --- a/tests/misc/sort-compress-proc.sh +++ b/tests/misc/sort-compress-proc.sh @@ -32,8 +32,9 @@ insize=$(stat -c %s - compress || framework_failure_ -#!/bin/sh + +printf '%s\n' '#!'"$SHELL" >compress || framework_failure_ +cat <<\EOF >>compress || framework_failure_ eval "$PRE_COMPRESS" tr 41 14 || exit eval "$POST_COMPRESS" diff --git a/tests/misc/sort-compress.sh b/tests/misc/sort-compress.sh index 605d539ba..584110e12 100755 --- a/tests/misc/sort-compress.sh +++ b/tests/misc/sort-compress.sh @@ -27,8 +27,8 @@ sort -S 1k in > out || fail=1 compare exp out || fail=1 # Create our own gzip program that will be used as the default -cat <<\EOF > gzip || fail=1 -#!/bin/sh +cat < gzip || fail=1 +#!$SHELL tr 41 14 touch ok EOF diff --git a/tests/misc/timeout-group.sh b/tests/misc/timeout-group.sh index 054c5aec6..d47f0dc83 100755 --- a/tests/misc/timeout-group.sh +++ b/tests/misc/timeout-group.sh @@ -30,8 +30,8 @@ print_ver_ timeout setsid true || skip_ "setsid required to control groups" -cat > timeout.cmd <<\EOF -#!/bin/sh +printf '%s\n' '#!'"$SHELL" > timeout.cmd || framework_failure_ +cat >> timeout.cmd <<\EOF trap 'touch int.received; exit' INT touch timeout.running count=$1 @@ -42,8 +42,8 @@ done EOF chmod a+x timeout.cmd -cat > group.sh <<\EOF -#!/bin/sh +cat > group.sh <