summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2007-11-30 13:45:38 +0100
committerJim Meyering <meyering@redhat.com>2007-11-30 13:45:38 +0100
commit9db1c230c4b9178b1f9ab41c47f3615c54b42852 (patch)
treefa66965cbba1371b01e5fdcab9c2ff3e59d74821 /tests
parent94a2bd5bf7d92c9d87cf2d8c7a7612144cce4277 (diff)
downloadcoreutils-9db1c230c4b9178b1f9ab41c47f3615c54b42852.tar.xz
Be extra careful to quote $abs_top_builddir-derived names.
* tests/misc/ls-misc (shell_quote): New function. Use it to quote file names derived from $abs_top_builddir, in case it contains shell meta-characters. This is not currently needed, since CuTmpdir detects the fishy name and skips the test. But it's important enough to add the extra protection. Reported by Ralf Wildenhues.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/misc/ls-misc17
1 files changed, 16 insertions, 1 deletions
diff --git a/tests/misc/ls-misc b/tests/misc/ls-misc
index 520c5031e..1e4f327f9 100755
--- a/tests/misc/ls-misc
+++ b/tests/misc/ls-misc
@@ -35,9 +35,24 @@ use strict;
# Turn off localisation of executable's ouput.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m![^\w+/.,-]!)
+ {
+ # Convert each single quote to '\''
+ $s =~ s/\'/\'\\\'\'/g;
+ # Then single quote the string.
+ $s = "'$s'";
+ }
+ return $s;
+}
+
# Set up files used by the setuid-etc tests; skip this entire test if
# that cannot be done.
-my $test = "$ENV{abs_top_builddir}/src/test";
+my $test = shell_quote "$ENV{abs_top_builddir}/src/test";
system (qq(touch setuid && chmod u+s setuid && $test -u setuid &&
touch setgid && chmod g+s setgid && $test -g setgid &&
mkdir sticky && chmod +t sticky && $test -k sticky &&