diff options
author | Jonathan Nieder <jrnieder@gmail.com> | 2010-08-09 22:32:11 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-11 09:58:38 -0700 |
commit | b6b56aceb85fe05dc681ac7ee1249e6b6e26e957 (patch) | |
tree | ce5d371dceacde2e2f3d686669c8127c6d83c319 | |
parent | read-tree: stop leaking tree objects (diff) | |
download | tgif-b6b56aceb85fe05dc681ac7ee1249e6b6e26e957.tar.xz |
write-tree: Avoid leak when index refers to an invalid object
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 <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | cache-tree.c | 4 |
1 files changed, 3 insertions, 1 deletions
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 */ |