aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2017-01-02 17:22:33 +0100
committerJunio C Hamano <gitster@pobox.com>2017-01-08 17:21:32 -0800
commitc9bb5d101ca657fa466afa8c4368c43ea7b7aca8 (patch)
tree792043ca2143471e3640de078fa5098ca4a3618d
parente2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 (diff)
downloadgit-c9bb5d101ca657fa466afa8c4368c43ea7b7aca8.tar.gz
git-c9bb5d101ca657fa466afa8c4368c43ea7b7aca8.tar.xz
git_exec_path: avoid Coverity warning about unfree()d result
Technically, it is correct that git_exec_path() returns a possibly malloc()ed string returned from system_path(), and it is sometimes not allocated. Cache the result in a static variable and make sure that we call system_path() only once, which plugs a potential leak. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--exec_cmd.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/exec_cmd.c b/exec_cmd.c
index 9d5703a15..eae56fefb 100644
--- a/exec_cmd.c
+++ b/exec_cmd.c
@@ -69,6 +69,7 @@ void git_set_argv_exec_path(const char *exec_path)
const char *git_exec_path(void)
{
const char *env;
+ static char *system_exec_path;
if (argv_exec_path)
return argv_exec_path;
@@ -78,7 +79,9 @@ const char *git_exec_path(void)
return env;
}
- return system_path(GIT_EXEC_PATH);
+ if (!system_exec_path)
+ system_exec_path = system_path(GIT_EXEC_PATH);
+ return system_exec_path;
}
static void add_path(struct strbuf *out, const char *path)