diff options
author | René Scharfe <l.s.r@web.de> | 2014-10-11 13:00:16 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-10-13 11:50:20 -0700 |
commit | 64a7e92f28e9bc053cf68d9b2e9ce4fb40e60e98 (patch) | |
tree | 22501188a5530bc4cc21c7ce0ece8e7de14b7572 /builtin/receive-pack.c | |
parent | 76f8611a5fb7e81c1bada0fb190d573a66fc03f6 (diff) | |
download | git-64a7e92f28e9bc053cf68d9b2e9ce4fb40e60e98.tar.gz git-64a7e92f28e9bc053cf68d9b2e9ce4fb40e60e98.tar.xz |
receive-pack: plug minor memory leak in unpack()
The argv_array used in unpack() is never freed. Instead of adding
explicit calls to argv_array_clear() use the args member of struct
child_process and let run_command() and friends clean up for us.
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/receive-pack.c')
-rw-r--r-- | builtin/receive-pack.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index c3230817d..886eb7032 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -910,7 +910,6 @@ static const char *pack_lockfile; static const char *unpack(int err_fd, struct shallow_info *si) { struct pack_header hdr; - struct argv_array av = ARGV_ARRAY_INIT; const char *hdr_err; int status; char hdr_arg[38]; @@ -933,17 +932,17 @@ static const char *unpack(int err_fd, struct shallow_info *si) if (si->nr_ours || si->nr_theirs) { alt_shallow_file = setup_temporary_shallow(si->shallow); - argv_array_pushl(&av, "--shallow-file", alt_shallow_file, NULL); + argv_array_push(&child.args, "--shallow-file"); + argv_array_push(&child.args, alt_shallow_file); } memset(&child, 0, sizeof(child)); if (ntohl(hdr.hdr_entries) < unpack_limit) { - argv_array_pushl(&av, "unpack-objects", hdr_arg, NULL); + argv_array_pushl(&child.args, "unpack-objects", hdr_arg, NULL); if (quiet) - argv_array_push(&av, "-q"); + argv_array_push(&child.args, "-q"); if (fsck_objects) - argv_array_push(&av, "--strict"); - child.argv = av.argv; + argv_array_push(&child.args, "--strict"); child.no_stdout = 1; child.err = err_fd; child.git_cmd = 1; @@ -958,13 +957,12 @@ static const char *unpack(int err_fd, struct shallow_info *si) if (gethostname(keep_arg + s, sizeof(keep_arg) - s)) strcpy(keep_arg + s, "localhost"); - argv_array_pushl(&av, "index-pack", + argv_array_pushl(&child.args, "index-pack", "--stdin", hdr_arg, keep_arg, NULL); if (fsck_objects) - argv_array_push(&av, "--strict"); + argv_array_push(&child.args, "--strict"); if (fix_thin) - argv_array_push(&av, "--fix-thin"); - child.argv = av.argv; + argv_array_push(&child.args, "--fix-thin"); child.out = -1; child.err = err_fd; child.git_cmd = 1; |