test-framework-sh: remove unsafe entries from PATH
authorBernhard Voelker <mail@bernhard-voelker.de>
Wed, 24 Nov 2021 22:59:00 +0000 (23:59 +0100)
committerBernhard Voelker <mail@bernhard-voelker.de>
Fri, 26 Nov 2021 00:06:15 +0000 (01:06 +0100)
Running tests with '.' in the PATH may yield unspecified results,
and is deemed unsafe per se.  This includes empty entries as well
which are treated like a '.' entry as per POSIX.

* tests/init.sh (setup_): Add snippet to remove relative and non-
accessible entries from the PATH environment variable.

ChangeLog
tests/init.sh

index 3e752b238f66451f51ed6191fe2e876645d6def1..efbe6c88805cf24eb2bffbfe30466071345ca5fd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2021-11-25  Bernhard Voelker  <mail@bernhard-voelker.de>
+
+       test-framework-sh: remove unsafe entries from PATH
+       Running tests with '.' in the PATH may yield unspecified results,
+       and is deemed unsafe per se.  This includes empty entries as well
+       which are treated like a '.' entry as per POSIX.
+       * tests/init.sh (setup_): Add snippet to remove relative and non-
+       accessible entries from the PATH environment variable.
+
 2021-11-24  Paul Eggert  <eggert@cs.ucla.edu>
 
        regex: merge from glibc
index 9ef834888c63df3f68bf465a9178edff96766b10..a975592ff91c0f6c0ce0698cca8e13054c4adeca 100644 (file)
@@ -426,6 +426,23 @@ setup_ ()
   for sig_ in 1 2 3 13 15; do
     eval "trap 'Exit $(expr $sig_ + 128)' $sig_"
   done
+
+  # Remove relative and non-accessible directories from PATH, including '.'
+  # and Zero-length entries.
+  saved_IFS="$IFS"
+  IFS=:
+  new_PATH=
+  sep_=
+  for dir in $PATH; do
+    case "$dir" in
+      /*) test -d "$dir/." || continue
+          new_PATH="${new_PATH}${sep_}${dir}"
+          sep_=':';;
+    esac
+  done
+  IFS="$saved_IFS"
+  PATH="$new_PATH"
+  export PATH
 }
 
 # This is a stub function that is run upon trap (upon regular exit and