summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2013-03-19 16:17:22 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-03-20 19:53:26 (GMT)
commit57165db00309e756d6d22b097a2fd6cc14055d14 (patch)
tree71a6762d96c0e4acc0cc2d87e0936e2e5fbf8ac3 /builtin
parent7e2010537e96d0a1144520222f20ba1dc3d61441 (diff)
downloadgit-57165db00309e756d6d22b097a2fd6cc14055d14.zip
git-57165db00309e756d6d22b097a2fd6cc14055d14.tar.gz
git-57165db00309e756d6d22b097a2fd6cc14055d14.tar.bz2
index-pack: always zero-initialize object_entry list
Commit 38a4556 (index-pack: start learning to emulate "verify-pack -v", 2011-06-03) added a "delta_depth" counter to each "struct object_entry". Initially, all object entries have their depth set to 0; in resolve_delta, we then set the depth of each delta to "base + 1". Base entries never have their depth touched, and remain at 0. To ensure that all depths start at 0, that commit changed calls to xmalloc the object_entry list into calls to xcalloc. However, it forgot that we grow the list with xrealloc later. These extra entries are used when we add an object from elsewhere to complete a thin pack. If we add a non-delta object, its depth value will just be uninitialized heap data. This patch fixes it by zero-initializing entries we add to the objects list via the xrealloc. Signed-off-by: Jeff King <peff@peff.net> Acked-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/index-pack.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 953dd30..6922086 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1106,6 +1106,8 @@ static void conclude_pack(int fix_thin_pack, const char *curr_pack, unsigned cha
objects = xrealloc(objects,
(nr_objects + nr_unresolved + 1)
* sizeof(*objects));
+ memset(objects + nr_objects + 1, 0,
+ nr_unresolved * sizeof(*objects));
f = sha1fd(output_fd, curr_pack);
fix_unresolved_deltas(f, nr_unresolved);
sprintf(msg, "completed with %d local objects",