worktree: fix leak in check_clean_worktree()
We allocate a child_env strvec but never free its memory. Instead, let's just use the strvec that our child_process struct provides, which is cleaned up automatically when we run the command. And while we're moving the initialization of the child_process around, let's switch it to use the official init function (zero-initializing it works OK, since strvec is happy enough with that, but it sets a bad example). Signed-off-by: Jeff King <peff@peff.net> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
47ae905ffb
commit
27ed6ccc12
@ -924,7 +924,6 @@ static int move_worktree(int ac, const char **av, const char *prefix)
|
|||||||
static void check_clean_worktree(struct worktree *wt,
|
static void check_clean_worktree(struct worktree *wt,
|
||||||
const char *original_path)
|
const char *original_path)
|
||||||
{
|
{
|
||||||
struct argv_array child_env = ARGV_ARRAY_INIT;
|
|
||||||
struct child_process cp;
|
struct child_process cp;
|
||||||
char buf[1];
|
char buf[1];
|
||||||
int ret;
|
int ret;
|
||||||
@ -935,15 +934,14 @@ static void check_clean_worktree(struct worktree *wt,
|
|||||||
*/
|
*/
|
||||||
validate_no_submodules(wt);
|
validate_no_submodules(wt);
|
||||||
|
|
||||||
argv_array_pushf(&child_env, "%s=%s/.git",
|
child_process_init(&cp);
|
||||||
|
argv_array_pushf(&cp.env_array, "%s=%s/.git",
|
||||||
GIT_DIR_ENVIRONMENT, wt->path);
|
GIT_DIR_ENVIRONMENT, wt->path);
|
||||||
argv_array_pushf(&child_env, "%s=%s",
|
argv_array_pushf(&cp.env_array, "%s=%s",
|
||||||
GIT_WORK_TREE_ENVIRONMENT, wt->path);
|
GIT_WORK_TREE_ENVIRONMENT, wt->path);
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
argv_array_pushl(&cp.args, "status",
|
argv_array_pushl(&cp.args, "status",
|
||||||
"--porcelain", "--ignore-submodules=none",
|
"--porcelain", "--ignore-submodules=none",
|
||||||
NULL);
|
NULL);
|
||||||
cp.env = child_env.argv;
|
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.dir = wt->path;
|
cp.dir = wt->path;
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user