Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to