git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Adam Murray via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org,  Adam Murray <ad@canva.com>
Subject: Re: [PATCH v2] trace2: prevent segfault on config collection where no value specified
Date: Fri, 10 Jan 2025 09:10:53 -0800	[thread overview]
Message-ID: <xmqqed1a8uhu.fsf@gitster.g> (raw)
In-Reply-To: <pull.1814.v2.git.1736494100622.gitgitgadget@gmail.com> (Adam Murray via GitGitGadget's message of "Fri, 10 Jan 2025 07:28:20 +0000")

"Adam Murray via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Adam Murray <ad@canva.com>
>
> When TRACE2 analytics is enabled, a git config option that has no value
> causes a segfault.

We often call this "valueless true syntax".  It may techincally
correct to say "has no value", but it is more friendly to readers if
you said "a configuration variable that is set to 'true' with
the valueless true syntax".

> diff --git a/trace2.c b/trace2.c
> index f894532d053..49e7d1db88f 100644
> --- a/trace2.c
> +++ b/trace2.c
> @@ -762,7 +762,7 @@ void trace2_def_param_fl(const char *file, int line, const char *param,
>  	if (!trace2_enabled)
>  		return;
>  
> -	redacted = redact_arg(value);
> +	redacted = value ? redact_arg(value): NULL;
>  
>  	for_each_wanted_builtin (j, tgt_j)
>  		if (tgt_j->pfn_param_fl)
> diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c
> index 45b0850a5ec..8e09485c83c 100644
> --- a/trace2/tr2_tgt_event.c
> +++ b/trace2/tr2_tgt_event.c
> @@ -491,7 +491,8 @@ static void fn_param_fl(const char *file, int line, const char *param,
>  	event_fmt_prepare(event_name, file, line, NULL, &jw);
>  	jw_object_string(&jw, "scope", scope_name);
>  	jw_object_string(&jw, "param", param);
> -	jw_object_string(&jw, "value", value);
> +	if (value)
> +		jw_object_string(&jw, "value", value);
>  	jw_end(&jw);

OK, so for "valueless true", we do not get the "value" element in
the json output, which makes sense.  Don't we have documentation
that explains what each element in the output means and when they
are given?  Shouldn't we update it?

> -	strbuf_addf(&buf_payload, "def_param scope:%s %s=%s", scope_name, param,
> -		    value);
> +	strbuf_addf(&buf_payload, "def_param scope:%s %s", scope_name, param);
> +	if (value)
> +		strbuf_addf(&buf_payload, "=%s", value);

OK.

The input did not spell the "=value" part and said "[section] key"
to mean that section.key is true, so we report that without "=value"
part.  This also makes sense.

> diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c
> index a6f9a8a193e..19ae7433ef8 100644
> --- a/trace2/tr2_tgt_perf.c
> +++ b/trace2/tr2_tgt_perf.c
> @@ -446,8 +446,9 @@ static void fn_param_fl(const char *file, int line, const char *param,
>  	struct strbuf scope_payload = STRBUF_INIT;
>  	enum config_scope scope = kvi->scope;
>  	const char *scope_name = config_scope_name(scope);
> -
> -	strbuf_addf(&buf_payload, "%s:%s", param, value);
> +	strbuf_addstr(&buf_payload, param);
> +	if (value)
> +		strbuf_addf(&buf_payload, ":%s", value);

I am not versed well enough in tgt-parf output format to tell if
this makes sense.  We'd need somebody else to review this part.

Thanks.

  reply	other threads:[~2025-01-10 17:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-07  0:04 [PATCH] trace2: prevent segfault on config collection where no value specified Adam Murray via GitGitGadget
2024-11-07  2:01 ` Jeff King
2024-11-07  3:02   ` Junio C Hamano
2025-01-10  7:28 ` [PATCH v2] " Adam Murray via GitGitGadget
2025-01-10 17:10   ` Junio C Hamano [this message]
2025-01-22 10:11   ` Johannes Schindelin
2025-01-22 18:12     ` Junio C Hamano
2025-01-22 18:18       ` Junio C Hamano
2025-01-23 17:01         ` D. Ben Knoble
2025-01-23 18:02           ` Junio C Hamano
2025-01-23 21:15             ` D. Ben Knoble

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=xmqqed1a8uhu.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=ad@canva.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.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 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).