From b6b56aceb85fe05dc681ac7ee1249e6b6e26e957 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Mon, 9 Aug 2010 22:32:11 -0500 Subject: write-tree: Avoid leak when index refers to an invalid object MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Noticed by valgrind during test t0000.35 “writing this tree without --missing-ok”. Even in the cherry-pick foo..bar code path, such an error is the end of the line. But maybe some day an interactive porcelain will want to link to libgit, making this matter. Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- cache-tree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'cache-tree.c') diff --git a/cache-tree.c b/cache-tree.c index d91743775d..c60cf9140d 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -328,9 +328,11 @@ static int update_one(struct cache_tree *it, mode = ce->ce_mode; entlen = pathlen - baselen; } - if (mode != S_IFGITLINK && !missing_ok && !has_sha1_file(sha1)) + if (mode != S_IFGITLINK && !missing_ok && !has_sha1_file(sha1)) { + strbuf_release(&buffer); return error("invalid object %06o %s for '%.*s'", mode, sha1_to_hex(sha1), entlen+baselen, path); + } if (ce->ce_flags & CE_REMOVE) continue; /* entry being removed */ -- cgit v1.2.1 From e92fa514a9ade4526ad5c119e3f12e69621c97b6 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Mon, 6 Sep 2010 15:40:16 -0600 Subject: cache_tree_free: Fix small memory leak Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache-tree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'cache-tree.c') diff --git a/cache-tree.c b/cache-tree.c index c60cf9140d..f755590da8 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -22,8 +22,10 @@ void cache_tree_free(struct cache_tree **it_p) if (!it) return; for (i = 0; i < it->subtree_nr; i++) - if (it->down[i]) + if (it->down[i]) { cache_tree_free(&it->down[i]->cache_tree); + free(it->down[i]); + } free(it->down); free(it); *it_p = NULL; -- cgit v1.2.1