From 2253303f1165d994a39a18254c39961f54ba6d5d Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Thu, 7 Nov 2024 09:46:14 +1000 Subject: [PATCH] trace2: prevent segfault on config collection where no value specified When TRACE2 analytics is enabled, a git config option that has no value causes a segfault. Steps to Reproduce GIT_TRACE2=true GIT_TRACE2_CONFIG_PARAMS=status.* git -c status.relativePaths version Expected Result git version 2.46.0 Actual Result zsh: segmentation fault GIT_TRACE2=true This adds a null check to prevent the segfault and instead return the "empty config value" error. --- t/t0210-trace2-normal.sh | 8 ++++++++ trace2.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/t/t0210-trace2-normal.sh b/t/t0210-trace2-normal.sh index b9adc94aab4165..4047ab562a455e 100755 --- a/t/t0210-trace2-normal.sh +++ b/t/t0210-trace2-normal.sh @@ -244,6 +244,14 @@ test_expect_success 'bug messages followed by BUG() are written to trace2' ' test_cmp expect actual ' +test_expect_success 'empty configuration values are handled' ' + test_when_finished "rm trace2.normal actual expect" && + echo >expect && + GIT_TRACE2="$(pwd)/trace2.normal" GIT_TRACE2_CONFIG_PARAMS=foo.empty \ + git -c foo.empty config foo.empty >actual && + test_cmp expect actual +' + sane_unset GIT_TRACE2_BRIEF # Now test without environment variables and get all Trace2 settings diff --git a/trace2.c b/trace2.c index f894532d05331c..5df43478b8fb22 100644 --- a/trace2.c +++ b/trace2.c @@ -759,7 +759,7 @@ void trace2_def_param_fl(const char *file, int line, const char *param, int j; const char *redacted; - if (!trace2_enabled) + if (!trace2_enabled || !value) return; redacted = redact_arg(value);