All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Jacob Vosmaer <jacob@gitlab.com>
Cc: Jeff Hostetler <jeffhost@microsoft.com>,
	Jonathan Tan <jonathantanmy@google.com>,
	git@vger.kernel.org
Subject: [PATCH] run-command: document use_shell option
Date: Fri, 22 Jan 2021 16:03:33 -0500	[thread overview]
Message-ID: <YAs9pTBsdskC8CPN@coredump.intra.peff.net> (raw)
In-Reply-To: <YAs2RMT1rEH/2LSp@coredump.intra.peff.net>

On Fri, Jan 22, 2021 at 03:32:04PM -0500, Jeff King wrote:

> Yeah, that is exactly right. "use_shell" just means that the command is
> (possibly) run with a shell. Quoting for any extra arguments is handled
> automatically.
> 
> I think you're correct that this was broken from the start in 10ac85c785
> (upload-pack: add object filtering for partial clone, 2017-12-08).
> That's even before the use_shell was added, and then later it was pushed
> into that conditional by 0b6069fe0a (fetch-pack: test support excluding
> large blobs, 2017-12-08). Presumably because the non-hook path would not
> have worked at all, and that was the first time any of it was actually
> tested. ;)
> 
> (I've cc'd authors of those commits as an FYI; I think both were
> relatively new to the project at the time so misunderstanding this
> subtlety of run-command is not too surprising).

While we're thinking about it, let's beef up the documentation a bit.

-- >8 --
Subject: [PATCH] run-command: document use_shell option

It's unclear how run-command's use_shell option should impact the
arguments fed to a command. Plausibly it could mean that we glue all of
the arguments together into a string to pass to the shell, in which case
that opens the question of whether the caller needs to quote them.

But in fact we don't implement it that way (and even if we did, we'd
probably auto-quote the arguments as part of the glue step). And we must
not receive quoted arguments, because we might actually optimize out the
shell entirely (i.e., the caller does not even know if a shell will be
involved in the end or not).

Since this ambiguity may have been the cause of a recent bug, let's
document the option a bit.

Signed-off-by: Jeff King <peff@peff.net>
---
 run-command.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/run-command.h b/run-command.h
index 6472b38bde..d08414a92e 100644
--- a/run-command.h
+++ b/run-command.h
@@ -126,8 +126,15 @@ struct child_process {
 	 */
 	unsigned silent_exec_failure:1;
 
-	unsigned stdout_to_stderr:1;
+	/**
+	 * Run the command from argv[0] using a shell (but note that we may
+	 * still optimize out the shell call if the command contains no
+	 * metacharacters). Note that further arguments to the command in
+	 * argv[1], etc, do not need to be shell-quoted.
+	 */
 	unsigned use_shell:1;
+
+	unsigned stdout_to_stderr:1;
 	unsigned clean_on_exit:1;
 	unsigned wait_after_clean:1;
 	void (*clean_on_exit_handler)(struct child_process *process);
-- 
2.30.0.664.g35e6628185


  reply	other threads:[~2021-01-22 21:05 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-22 14:21 [PATCH 0/1] upload-pack.c: fix filter spec quoting bug Jacob Vosmaer
2021-01-22 14:21 ` [PATCH 1/1] " Jacob Vosmaer
2021-01-22 20:32   ` Jeff King
2021-01-22 21:03     ` Jeff King [this message]
2021-01-22 21:32       ` [PATCH] run-command: document use_shell option Taylor Blau
2021-01-22 22:21       ` Junio C Hamano
2021-01-23  0:04         ` Jeff King
2021-01-22 22:10     ` [PATCH 1/1] upload-pack.c: fix filter spec quoting bug Junio C Hamano
2021-01-25 17:09     ` [PATCH v2] " Jacob Vosmaer
2021-01-25 19:48       ` Junio C Hamano
2021-01-25 21:16         ` Jeff King
2021-01-25 23:09           ` [PATCH v3 0/1] " Jacob Vosmaer
2021-01-25 23:09             ` [PATCH v3 1/1] " Jacob Vosmaer
2021-01-26  9:57               ` Ævar Arnfjörð Bjarmason
2021-01-26 10:29                 ` Jacob Vosmaer
2021-01-26 17:46                   ` Junio C Hamano
2021-01-26 21:09                   ` Jeff King
2021-01-28 16:04                     ` [PATCH v4] " Jacob Vosmaer
     [not found]                       ` <xmqqmtwsx4d9.fsf@gitster.c.googlers.com>
2021-01-28 21:12                         ` Jacob Vosmaer
2021-01-28 21:40                           ` Jacob Vosmaer
2021-01-28 21:51                           ` Jeff King
2021-02-01 20:31                             ` Jacob Vosmaer
2021-01-28 21:58                           ` Junio C Hamano
2021-02-01 20:29                             ` [PATCH v5 0/1] " Jacob Vosmaer
2021-02-01 20:29                               ` [PATCH v5 1/1] " Jacob Vosmaer
2021-02-02  5:49                               ` [PATCH v5 0/1] " Junio C Hamano
2021-02-02 10:37                                 ` [PATCH 1/1] t5544: clarify 'hook works with partial clone' test Jacob Vosmaer
2021-02-02 17:22                                   ` Eric Sunshine
2021-02-02 19:24                                     ` [PATCH v2] " Jacob Vosmaer
2021-02-02 20:21                                       ` Junio C Hamano
2021-01-26 17:51                 ` [PATCH v3 1/1] upload-pack.c: fix filter spec quoting bug Junio C Hamano
2021-01-26 21:07                 ` Jeff King
2021-01-26  0:01             ` [PATCH v3 0/1] " Junio C Hamano
2021-01-26  2:25           ` [PATCH v2] " Junio C Hamano
2021-01-25 21:16       ` Jeff King
2021-01-25 17:14     ` [PATCH 1/1] " Jacob Vosmaer
2021-01-25 17:41     ` Jacob Vosmaer

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=YAs9pTBsdskC8CPN@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=jacob@gitlab.com \
    --cc=jeffhost@microsoft.com \
    --cc=jonathantanmy@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.