git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH] work around an obnoxious bash "safety feature" on OpenBSD
Date: Tue, 26 Jan 2010 16:29:30 -0800	[thread overview]
Message-ID: <7veilcxudx.fsf@alter.siamese.dyndns.org> (raw)

Bash (4.0.24) on OpenBSD 4.6 refuses to run this snippet:

    $ cat gomi.sh
    #!/bin/sh
    one="/var/tmp/1 1"
    rm -f /var/tmp/1 "/var/tmp/1 1"
    echo hello >$one
    $ sh gomi.sh; ls /var/tmp/1*
    /var/tmp/1 1
    $ bash gomi.sh; ls /var/tmp/1*
    gomi.sh: line 4: $one: ambiguous redirect
    ls: /var/tmp/1*: No such file or directory

Every competent shell programmer knows that a <$word in redirection is not
subject to field splitting (POSIX.1 "2.7 Redirection" explicitly lists the
kind of expansion performed: "... the word that follows the redirection
operator shall be subjected to ...", and "Field Splitting" is not among
them).

Some clueless folks apparently decided that users need to be protected in
the name of "security", however.

Output from "git grep -e '> *\$' -- '*.sh'" indicates that rebase-i
suffers from this bogus "safety".  Work it around by surrounding the
variable reference with a dq pair.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---

 * I don't regularly run OpenBSD and build test on the platform only
   occasionally.  People who _do_ care about the platform perhaps need to
   run the testsuite to find and help fixing other possible issues.

   You will trigger this the path to your git work tree has whitespace
   in it, e.g. t3404.

 git-rebase--interactive.sh |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 19a608c..cecaa1d 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -368,7 +368,8 @@ nth_string () {
 }
 
 update_squash_messages () {
-	if test -f "$SQUASH_MSG"; then
+	if test -f "$SQUASH_MSG"
+	then
 		mv "$SQUASH_MSG" "$SQUASH_MSG".bak || exit
 		COUNT=$(($(sed -n \
 			-e "1s/^# This is a combination of \(.*\) commits\./\1/p" \
@@ -378,7 +379,7 @@ update_squash_messages () {
 			sed -e 1d -e '2,/^./{
 				/^$/d
 			}' <"$SQUASH_MSG".bak
-		} >$SQUASH_MSG
+		} >"$SQUASH_MSG"
 	else
 		commit_message HEAD > "$FIXUP_MSG" || die "Cannot write $FIXUP_MSG"
 		COUNT=2
@@ -387,7 +388,7 @@ update_squash_messages () {
 			echo "# The first commit's message is:"
 			echo
 			cat "$FIXUP_MSG"
-		} >$SQUASH_MSG
+		} >"$SQUASH_MSG"
 	fi
 	case $1 in
 	squash)
@@ -403,7 +404,7 @@ update_squash_messages () {
 		echo
 		commit_message $2 | sed -e 's/^/#	/'
 		;;
-	esac >>$SQUASH_MSG
+	esac >>"$SQUASH_MSG"
 }
 
 peek_next_command () {



    

             reply	other threads:[~2010-01-27  0:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-27  0:29 Junio C Hamano [this message]
2010-01-27  2:41 ` [PATCH] work around an obnoxious bash "safety feature" on OpenBSD Jeff Epler
2010-01-27  3:01   ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7veilcxudx.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).