config: copy the return value of prefix_filename

The prefix_filename function returns a pointer to a static buffer which may be overwritten by subsequent calls. Since we are going to keep the result around for a while, let's be sure to duplicate it for safety. I don't think this can be triggered as a bug in the current code, but it's a good idea to be defensive, as any resulting bug would be quite subtle. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Feb 16, 2012 at 03:03 UTC 839de2527258879aa21ae7ad425353f06dbb4717
1 file changed +4 -3
builtin/config.c
+4 -3
@@ -377,9 +377,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
377 config_exclusive_filename = git_pathdup("config");
378 else if (given_config_file) {
379 if (!is_absolute_path(given_config_file) && prefix)
380 - config_exclusive_filename = prefix_filename(prefix,
381 - strlen(prefix),
382 - given_config_file);
380 + config_exclusive_filename =
381 + xstrdup(prefix_filename(prefix,
382 + strlen(prefix),
383 + given_config_file));
384 else
385 config_exclusive_filename = given_config_file;
386 }