diff options
author | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2010-08-21 07:27:12 +0200 |
---|---|---|
committer | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2010-08-21 07:40:39 +0200 |
commit | b268a1f605ba5eb00d15c6e169d535633fa3d39b (patch) | |
tree | c24226821e463cf2c4078c91aa1b5f44d8e4bce5 /lib/mdate-sh | |
parent | 999865553137b48a0770b5073cfd4f91c1e49593 (diff) | |
download | automake-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-x | lib/mdate-sh | 23 |
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 |