summaryrefslogtreecommitdiff
path: root/lib/mdate-sh
diff options
context:
space:
mode:
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>2010-08-21 07:27:12 +0200
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>2010-08-21 07:40:39 +0200
commitb268a1f605ba5eb00d15c6e169d535633fa3d39b (patch)
treec24226821e463cf2c4078c91aa1b5f44d8e4bce5 /lib/mdate-sh
parent999865553137b48a0770b5073cfd4f91c1e49593 (diff)
downloadautomake-b268a1f605ba5eb00d15c6e169d535633fa3d39b.tar.gz
Improve robustness of mdate-sh script.
* lib/mdate-sh: Sanitize zsh behavior on startup, to ensure $ls_command is word-split properly upon invocation. (error): New function. (main): Use it. Improve error checking to avoid endless loop in case $ls_command gave bogus output. Fix eval quotation. * tests/mdate6.test: New test, to expose eval quotation error. * tests/Makefile.am: Update. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Diffstat (limited to 'lib/mdate-sh')
-rwxr-xr-xlib/mdate-sh23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/mdate-sh b/lib/mdate-sh
index c477512f8..60dc485a3 100755
--- a/lib/mdate-sh
+++ b/lib/mdate-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# Get modification time of a file or directory and pretty-print it.
-scriptversion=2010-02-22.21; # UTC
+scriptversion=2010-08-21.06; # UTC
# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009, 2010
# Free Software Foundation, Inc.
@@ -29,6 +29,15 @@ scriptversion=2010-02-22.21; # UTC
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
case $1 in
'')
echo "$0: No file. Try \`$0 --help' for more information." 1>&2
@@ -51,6 +60,13 @@ EOF
;;
esac
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
# Prevent date giving response in another language.
LANG=C
export LANG
@@ -100,6 +116,7 @@ month=
command=
until test $month
do
+ test $# -gt 0 || error "failed parsing \`$ls_command /' output"
shift
# Add another shift to the command.
command="$command shift;"
@@ -119,8 +136,10 @@ do
esac
done
+test -n "$month" || error "failed parsing \`$ls_command /' output"
+
# Get the extended ls output of the file or directory.
-set dummy x`eval "$ls_command \"\$save_arg1\""`
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
# Remove all preceding arguments
eval $command