X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=sha1_file.c;h=f2d33afb27f6c73ad6c177098fe2f2674add7fbe;hb=61c2bcbd11e3b66a328b3850c01592e5dc1c67bb;hp=ba8c4f76011c68548e959a17883b9a9d6cfbeeff;hpb=3d9c54d7b39faab35f0b30459fe4e2c7f32124b8;p=git.git diff --git a/sha1_file.c b/sha1_file.c index ba8c4f76..f2d33afb 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -808,10 +808,12 @@ static int packed_delta_info(unsigned char *base_sha1, * the result size. */ data = delta_head; - get_delta_hdr_size(&data); /* ignore base size */ + + /* ignore base size */ + get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); /* Read the result size */ - result_size = get_delta_hdr_size(&data); + result_size = get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); *sizep = result_size; } return 0; @@ -872,17 +874,19 @@ void packed_object_info_detail(struct pack_entry *e, unsigned char *base_sha1) { struct packed_git *p = e->p; - unsigned long offset, left; + unsigned long offset; unsigned char *pack; enum object_type kind; offset = unpack_object_header(p, e->offset, &kind, size); pack = p->pack_base + offset; - left = p->pack_size - offset; if (kind != OBJ_DELTA) *delta_chain_length = 0; else { unsigned int chain_length = 0; + if (p->pack_size <= offset + 20) + die("pack file %s records an incomplete delta base", + p->pack_name); memcpy(base_sha1, pack, 20); do { struct pack_entry base_ent;