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 pack 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@xxxxxxxx> --- Another solution would be to say "only look at delta_depth if the object is a delta"; we follow that rule already in the output histogram code path, but just do not when checking a delta's base. So it would similarly be a one-liner. But I think given the switch to xcalloc in the original patch, the intent was to just always zero each object, as I described above. This would be more readable if we had an "xrecalloc" or similar, which realloc'd a pointer and set just the _new_ space to zeros. I do not recall ever hearing of such a function, though. I figured since it is a one-off, it is simpler to just say what we mean with memset here than invent a new allocation function that will leave people scratching their heads about its semantics. builtin/index-pack.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 43d364b..ca62443 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -1107,6 +1107,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, 0, + (nr_unresolved + 1) * sizeof(*objects)); f = sha1fd(output_fd, curr_pack); fix_unresolved_deltas(f, nr_unresolved); sprintf(msg, _("completed with %d local objects"), -- 1.8.2.4.g2ed830d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html