mirror of
https://github.com/git/git.git
synced 2024-11-27 03:53:55 +08:00
shell: fix leaking strings
There are two memory leaks in "shell.c". The first one in `run_shell()` is trivial and fixed without further explanation. The second one in `cmd_main()` happens because we overwrite the `prog` variable, which contains an allocated string. In fact though, the memory pointed to by that variable is still in use because we use `split_cmdline()`, which may create pointers into the middle of that string. But as we do not have a direct pointer to the head of the allocated string anymore, we get a complaint by the leak checker. Address this by not overwriting the `prog` pointer. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d607bd8816
commit
c75841687b
6
shell.c
6
shell.c
@ -143,6 +143,7 @@ static void run_shell(void)
|
||||
}
|
||||
|
||||
free(argv);
|
||||
free(split_args);
|
||||
free(rawargs);
|
||||
} while (!done);
|
||||
}
|
||||
@ -216,9 +217,8 @@ int cmd_main(int argc, const char **argv)
|
||||
count = split_cmdline(prog, &user_argv);
|
||||
if (count >= 0) {
|
||||
if (is_valid_cmd_name(user_argv[0])) {
|
||||
prog = make_cmd(user_argv[0]);
|
||||
user_argv[0] = prog;
|
||||
execv(user_argv[0], (char *const *) user_argv);
|
||||
char *cmd = make_cmd(user_argv[0]);
|
||||
execv(cmd, (char *const *) user_argv);
|
||||
}
|
||||
free(prog);
|
||||
free(user_argv);
|
||||
|
@ -11,6 +11,7 @@ cvs CLI client via git-cvsserver server'
|
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
|
@ -1,6 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='git shell tests'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'shell allows upload-pack' '
|
||||
|
Loading…
Reference in New Issue
Block a user