[PATCH] git-tar-tree: fix minor memory leak
From: Rene Scharfe <hidden>
Date: 2016-06-15 22:42:35
Subsystem:
the rest · Maintainer:
Linus Torvalds
Free the root tree object buffer when we're done, plugging a minor leak in generate_tar(). Note: we cannot simply free(tree.buf) because this pointer is modified by tree_entry() calls in traverse_tree(). Signed-off-by: Rene Scharfe <redacted> --- My first Valgrind run. :)
diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c
index 7c48db9..215892b 100644
--- a/builtin-tar-tree.c
+++ b/builtin-tar-tree.c@@ -314,6 +314,7 @@ static int generate_tar(int argc, const struct commit *commit; struct tree_desc tree; struct strbuf current_path; + void *buffer; current_path.buf = xmalloc(PATH_MAX); current_path.alloc = PATH_MAX;
@@ -341,8 +342,8 @@ static int generate_tar(int argc, const } else archive_time = time(NULL); - tree.buf = read_object_with_reference(sha1, tree_type, &tree.size, - tree_sha1); + tree.buf = buffer = read_object_with_reference(sha1, tree_type, + &tree.size, tree_sha1); if (!tree.buf) die("not a reference to a tag, commit or tree object: %s", sha1_to_hex(sha1));
@@ -351,6 +352,7 @@ static int generate_tar(int argc, const write_entry(tree_sha1, ¤t_path, 040777, NULL, 0); traverse_tree(&tree, ¤t_path); write_trailer(); + free(buffer); free(current_path.buf); return 0; }