builtin/credential-cache: fix trivial leaks
There are two trivial leaks in git-credential-cache(1): - We leak the child process in `spawn_daemon()`. As we do not call `finish_command()` and instead let the created process daemonize, we have to clear the process manually. - We do not free the computed socket path in case it wasn't given via `--socket=`. Plug both of these memory leaks. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
cd6d7630fa
commit
145c979020
@ -88,6 +88,8 @@ static void spawn_daemon(const char *socket)
|
|||||||
die_errno("unable to read result code from cache daemon");
|
die_errno("unable to read result code from cache daemon");
|
||||||
if (r != 3 || memcmp(buf, "ok\n", 3))
|
if (r != 3 || memcmp(buf, "ok\n", 3))
|
||||||
die("cache daemon did not start: %.*s", r, buf);
|
die("cache daemon did not start: %.*s", r, buf);
|
||||||
|
|
||||||
|
child_process_clear(&daemon);
|
||||||
close(daemon.out);
|
close(daemon.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +139,8 @@ static void announce_capabilities(void)
|
|||||||
|
|
||||||
int cmd_credential_cache(int argc, const char **argv, const char *prefix)
|
int cmd_credential_cache(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
char *socket_path = NULL;
|
const char *socket_path_arg = NULL;
|
||||||
|
char *socket_path;
|
||||||
int timeout = 900;
|
int timeout = 900;
|
||||||
const char *op;
|
const char *op;
|
||||||
const char * const usage[] = {
|
const char * const usage[] = {
|
||||||
@ -147,7 +150,7 @@ int cmd_credential_cache(int argc, const char **argv, const char *prefix)
|
|||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
OPT_INTEGER(0, "timeout", &timeout,
|
OPT_INTEGER(0, "timeout", &timeout,
|
||||||
"number of seconds to cache credentials"),
|
"number of seconds to cache credentials"),
|
||||||
OPT_STRING(0, "socket", &socket_path, "path",
|
OPT_STRING(0, "socket", &socket_path_arg, "path",
|
||||||
"path of cache-daemon socket"),
|
"path of cache-daemon socket"),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
@ -160,6 +163,7 @@ int cmd_credential_cache(int argc, const char **argv, const char *prefix)
|
|||||||
if (!have_unix_sockets())
|
if (!have_unix_sockets())
|
||||||
die(_("credential-cache unavailable; no unix socket support"));
|
die(_("credential-cache unavailable; no unix socket support"));
|
||||||
|
|
||||||
|
socket_path = xstrdup_or_null(socket_path_arg);
|
||||||
if (!socket_path)
|
if (!socket_path)
|
||||||
socket_path = get_socket_path();
|
socket_path = get_socket_path();
|
||||||
if (!socket_path)
|
if (!socket_path)
|
||||||
@ -176,6 +180,7 @@ int cmd_credential_cache(int argc, const char **argv, const char *prefix)
|
|||||||
else
|
else
|
||||||
; /* ignore unknown operation */
|
; /* ignore unknown operation */
|
||||||
|
|
||||||
|
free(socket_path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='credential-cache tests'
|
test_description='credential-cache tests'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
. "$TEST_DIRECTORY"/lib-credential.sh
|
. "$TEST_DIRECTORY"/lib-credential.sh
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user