git_exec_path: avoid Coverity warning about unfree()d result
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 2 Jan 2017 16:22:33 +0000 (17:22 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Jan 2017 01:21:32 +0000 (17:21 -0800)
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>
exec_cmd.c
index 9d5703a157fe8e9d8396e0771798e54dc5eea6eb..eae56fefba9953b9b589a2b17a7a282d7120754c 100644 (file)
@@ -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)