Sergey Vlasov <vsu@xxxxxxxxxxx> writes: > On Tue, 17 Oct 2006 14:47:16 -0400 (EDT) Nicolas Pitre wrote: > >> Is it possible that sizeof(union delta_base) might not be equal to 20 >> for you? > > Yes, on x86_64 this is 24 because of 8-byte alignment for longs: Enough eyeballs made this bug shallow ;-) Thanks. diff --git a/index-pack.c b/index-pack.c index fffddd2..49b6efe 100644 --- a/index-pack.c +++ b/index-pack.c @@ -166,6 +166,7 @@ static void *unpack_raw_entry(unsigned l case OBJ_REF_DELTA: if (pos + 20 >= pack_limit) bad_object(offset, "object extends past end of pack"); + memset(delta_base, 0, sizeof(*delta_base)); hashcpy(delta_base->sha1, pack_base + pos); pos += 20; break; @@ -290,6 +291,7 @@ static void resolve_delta(struct delta_e bad_object(obj->offset, "failed to apply delta"); sha1_object(result, result_size, type, obj->sha1); + memset(&delta_base, 0, sizeof(delta_base)); hashcpy(delta_base.sha1, obj->sha1); if (!find_delta_childs(&delta_base, &first, &last)) { for (j = first; j <= last; j++) @@ -365,6 +367,7 @@ static void parse_pack_objects(void) if (obj->type == OBJ_REF_DELTA || obj->type == OBJ_OFS_DELTA) continue; + memset(&base, 0, sizeof(base)); hashcpy(base.sha1, obj->sha1); ref = !find_delta_childs(&base, &ref_first, &ref_last); memset(&base, 0, sizeof(base)); - 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