Re: [PATCH v2 5/5] pretty: add support for separator option in %(trailers)
- From
Anders Waldenborg <anders@0x63.nu>
- Date
- Nov 5, 2018, 18:24 UTC
- Message-ID
- <871s7zl6xp.fsf@0x63.nu>
- In-Reply-To
- <xmqqpnvkjmtu.fsf@gitster-ct.c.googlers.com>
Junio C Hamano writes:
Show 24 quoted lines
> Anders Waldenborg <anders@0x63.nu> writes:
>
>> @@ -1352,6 +1353,17 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
>> arg++;
>>
>> opts.only_trailers = 1;
>> + } else if (skip_prefix(arg, "separator=", &arg)) {
>> + size_t seplen = strcspn(arg, ",)");
>> + strbuf_reset(&sepbuf);
>> + char *fmt = xstrndup(arg, seplen);
>> + strbuf_expand(&sepbuf, fmt, format_fundamental, NULL);
>
> This somehow feels akin to using end-user supplied param to printf(3)
> as its format argument e.g.
>
> int main(int ac, char *av) {
> printf(av[1]);
> return 0;
> }
>
> which is not a good idea. Is there a mechanism with which we can
> ensure that the separator=<what> specification will never come from
> potentially malicious sources (e.g. not used to show things on webpage
> allowing random folks who access he site to supply custom format)?I can't see a case where this could add anything that isn't already possible.
AFAICU strbuf_expand doesn't suffer from the worst things that printf(3) suffers from wrt untrusted format string (i.e no printf style %n which can write to memory, and no vaargs on stack which allows leaking random stuff).
The separator option is part of the full format string. If a malicious user can specify that, they can't really do anything new, as the separator only can expand %n and %xNN, which they already can do in the full string.
But maybe I'm missing something?