Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/index-pack.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 59b6c56..db2370d 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -742,6 +742,19 @@ static int check_collison(struct object_entry *entry) return 0; } +static void check_against_sha1table(struct object_entry *obj) +{ + const unsigned char *found; + if (!packv4) + return; + + found = bsearch(obj->idx.sha1, sha1_table, nr_objects, 20, + (int (*)(const void *, const void *))hashcmp); + if (!found) + die(_("object %s not found in SHA-1 table"), + sha1_to_hex(obj->idx.sha1)); +} + static void sha1_object(const void *data, struct object_entry *obj_entry, unsigned long size, enum object_type type, const unsigned char *sha1) @@ -910,6 +923,7 @@ static void resolve_delta(struct object_entry *delta_obj, bad_object(delta_obj->idx.offset, _("failed to apply delta")); hash_sha1_file(result->data, result->size, typename(delta_obj->real_type), delta_obj->idx.sha1); + check_against_sha1table(delta_obj); sha1_object(result->data, NULL, result->size, delta_obj->real_type, delta_obj->idx.sha1); counter_lock(); @@ -1087,8 +1101,12 @@ static void parse_pack_objects(unsigned char *sha1) /* large blobs, check later */ obj->real_type = OBJ_BAD; nr_delays++; - } else - sha1_object(data, NULL, obj->size, obj->type, obj->idx.sha1); + check_against_sha1table(obj); + } else { + check_against_sha1table(obj); + sha1_object(data, NULL, obj->size, obj->type, + obj->idx.sha1); + } free(data); display_progress(progress, i+1); } -- 1.8.2.83.gc99314b -- 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