git_config_set_multivar_in_file: handle "unset" errors
We pass off to the "_gently" form to do the real work, and just die() if it returned an error. However, our die message de-references "value", which may be NULL if the request was to unset a variable. Nobody using glibc noticed, because it simply prints "(null)", which is good enough for the test suite (and presumably very few people run across this in practice). But other libc implementations (like Solaris) may segfault. Let's not only fix that, but let's make the message more clear about what is going on in the "unset" case. Reported-by: "Tom G. Christensen" <tgc@jupiterrise.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Apr 9, 2016 at 13:43 UTC
1cae428e2902b3f19a56625411f09cc239855fe7
1 file changed
+6
-2
config.c
+6
-2
@@ -2221,9 +2221,13 @@ void git_config_set_multivar_in_file(const char *config_filename,
2221
const char *key, const char *value,
2222
const char *value_regex, int multi_replace)
2223
{
2224
- if (git_config_set_multivar_in_file_gently(config_filename, key, value,
2225
- value_regex, multi_replace))
2224
+ if (!git_config_set_multivar_in_file_gently(config_filename, key, value,
2225
+ value_regex, multi_replace))
2226
+ return;
2227
+ if (value)
2228
die(_("could not set '%s' to '%s'"), key, value);
2229
+ else
2230
+ die(_("could not unset '%s'"), key);
2231
}
2232
2233
int git_config_set_multivar_gently(const char *key, const char *value,