Merge branch 'ps/leakfixes-part-7'
More leak-fixes. * ps/leakfixes-part-7: (23 commits) diffcore-break: fix leaking filespecs when merging broken pairs revision: fix leaking parents when simplifying commits builtin/maintenance: fix leak in `get_schedule_cmd()` builtin/maintenance: fix leaking config string promisor-remote: fix leaking partial clone filter grep: fix leaking grep pattern submodule: fix leaking submodule ODB paths trace2: destroy context stored in thread-local storage builtin/difftool: plug several trivial memory leaks builtin/repack: fix leaking configuration diffcore-order: fix leaking buffer when parsing orderfiles parse-options: free previous value of `OPTION_FILENAME` diff: fix leaking orderfile option builtin/pull: fix leaking "ff" option dir: fix off by one errors for ignored and untracked entries builtin/submodule--helper: fix leaking remote ref on errors t/helper: fix leaking subrepo in nested submodule config helper builtin/submodule--helper: fix leaking error buffer builtin/submodule--helper: clear child process when not running it submodule: fix leaking update strategy ...
This commit is contained in:
22
git.c
22
git.c
@@ -711,6 +711,7 @@ static void strip_extension(const char **argv)
|
||||
static void handle_builtin(int argc, const char **argv)
|
||||
{
|
||||
struct strvec args = STRVEC_INIT;
|
||||
const char **argv_copy = NULL;
|
||||
const char *cmd;
|
||||
struct cmd_struct *builtin;
|
||||
|
||||
@@ -731,13 +732,28 @@ static void handle_builtin(int argc, const char **argv)
|
||||
}
|
||||
|
||||
argc++;
|
||||
argv = args.v;
|
||||
|
||||
/*
|
||||
* `run_builtin()` will modify the argv array, so we need to
|
||||
* create a shallow copy such that we can free all of its
|
||||
* strings.
|
||||
*/
|
||||
CALLOC_ARRAY(argv_copy, argc + 1);
|
||||
COPY_ARRAY(argv_copy, args.v, argc);
|
||||
|
||||
argv = argv_copy;
|
||||
}
|
||||
|
||||
builtin = get_builtin(cmd);
|
||||
if (builtin)
|
||||
exit(run_builtin(builtin, argc, argv, the_repository));
|
||||
if (builtin) {
|
||||
int ret = run_builtin(builtin, argc, argv, the_repository);
|
||||
strvec_clear(&args);
|
||||
free(argv_copy);
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
strvec_clear(&args);
|
||||
free(argv_copy);
|
||||
}
|
||||
|
||||
static void execv_dashed_external(const char **argv)
|
||||
|
||||
Reference in New Issue
Block a user