git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [BUG] [PATCH]: run-command.c
@ 2016-10-21  5:50 Duncan Roe
  2016-10-21  9:00 ` Jeff King
  0 siblings, 1 reply; 4+ messages in thread
From: Duncan Roe @ 2016-10-21  5:50 UTC (permalink / raw)
  To: git

prepare_shell_cmd() executes /bin/sh with superfluous arguments on all but
single-word shell commands.

For example, if .git/config has this alias (the sleep is to leave time to
examine output from ps, &c.):

[alias]
	tryme = "!echo $PWD;sleep 600"

running "git tryme" in one console and checking what it does in another

--- 1st xterm

16:42:12$ git tryme
/usr/src/git/.git
echo $PWD;sleep 600: line 1:  2602 Terminated              sleep 600
16:43:15$


--- 2nd xterm

16:42:06$ ps axf|grep -A2 trym[e]
 2599 pts/4    S+     0:00      \_ git tryme
 2601 pts/4    S+     0:00          \_ /bin/sh -c echo $PWD;sleep 600 echo $PWD;sleep 600
 2602 pts/4    S+     0:00              \_ sleep 600
16:42:45$ cat /proc/2601/cmdline | xargs -0 -n1 echo
/bin/sh
-c
echo $PWD;sleep 600
echo $PWD;sleep 600
16:43:04$ kill 2602
16:43:15$

---

There is an extra "-c" argument. This is caused by a missing "else", fixed by
the appended patch,

Cheers ... Duncan.

----------8<-------------------

--- a/run-command.c
+++ b/run-command.c
@@ -182,8 +182,8 @@ static const char **prepare_shell_cmd(struct argv_array *out, const char **argv)
 		else
 			argv_array_pushf(out, "%s \"$@\"", argv[0]);
 	}
-
-	argv_array_pushv(out, argv);
+	else
+		argv_array_pushv(out, argv);
 	return out->argv;
 }


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-10-21 17:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-21  5:50 [BUG] [PATCH]: run-command.c Duncan Roe
2016-10-21  9:00 ` Jeff King
2016-10-21 11:07   ` Duncan Roe
2016-10-21 17:19   ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).