git-send-email.perl: Handle shell metacharacters in $EDITOR properly
This fixes the git-send-perl semantics for launching an editor when $GIT_EDITOR (or friends) contains shell metacharacters to match launch_editor() in builtin-tag.c. If we use the current approach (sh -c '$0 $@' "$EDITOR" files ...), we see it fails when $EDITOR has shell metacharacters: $ sh -x -c '$0 $@' "$VISUAL" "foo" + "$FAKE_EDITOR" foo "$FAKE_EDITOR": 1: "$FAKE_EDITOR": not found Whereas builtin-tag.c will invoke sh -c "$EDITOR \"$@\"". Thus, this patch changes git-send-email.perl to use the same method as the C utilities, and additionally updates t/t9001-send-email.sh to test for this bug. Signed-off-by: Bryan Donlan <bdonlan@fushizen.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e5c349ba11
commit
065096c2b5
@ -512,7 +512,7 @@ EOT
|
|||||||
close(C);
|
close(C);
|
||||||
|
|
||||||
my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
|
my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
|
||||||
system('sh', '-c', '$0 $@', $editor, $compose_filename);
|
system('sh', '-c', $editor.' "$@"', $editor, $compose_filename);
|
||||||
|
|
||||||
open(C2,">",$compose_filename . ".final")
|
open(C2,">",$compose_filename . ".final")
|
||||||
or die "Failed to open $compose_filename.final : " . $!;
|
or die "Failed to open $compose_filename.final : " . $!;
|
||||||
|
@ -139,15 +139,19 @@ test_expect_success 'Valid In-Reply-To when prompting' '
|
|||||||
|
|
||||||
test_expect_success 'setup fake editor' '
|
test_expect_success 'setup fake editor' '
|
||||||
(echo "#!/bin/sh" &&
|
(echo "#!/bin/sh" &&
|
||||||
echo "echo fake edit >>\$1"
|
echo "echo fake edit >>\"\$1\""
|
||||||
) >fake-editor &&
|
) >fake-editor &&
|
||||||
chmod +x fake-editor
|
chmod +x fake-editor
|
||||||
'
|
'
|
||||||
|
|
||||||
|
FAKE_EDITOR="$(pwd)/fake-editor"
|
||||||
|
export FAKE_EDITOR
|
||||||
|
GIT_EDITOR='"$FAKE_EDITOR"'
|
||||||
|
export GIT_EDITOR
|
||||||
|
|
||||||
test_expect_success '--compose works' '
|
test_expect_success '--compose works' '
|
||||||
clean_fake_sendmail &&
|
clean_fake_sendmail &&
|
||||||
echo y | \
|
echo y | \
|
||||||
GIT_EDITOR=$(pwd)/fake-editor \
|
|
||||||
GIT_SEND_EMAIL_NOTTY=1 \
|
GIT_SEND_EMAIL_NOTTY=1 \
|
||||||
git send-email \
|
git send-email \
|
||||||
--compose --subject foo \
|
--compose --subject foo \
|
||||||
|
Loading…
Reference in New Issue
Block a user