]> git.ipfire.org Git - thirdparty/git.git/commitdiff
chunk-format: restore duplicate chunk checks
authorDerrick Stolee <dstolee@microsoft.com>
Thu, 18 Feb 2021 14:07:38 +0000 (14:07 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 Feb 2021 21:38:16 +0000 (13:38 -0800)
Before refactoring into the chunk-format API, the commit-graph parsing
logic included checks for duplicate chunks. It is unlikely that we would
desire a chunk-based file format that allows duplicate chunk IDs in the
table of contents, so add duplicate checks into
read_table_of_contents().

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
chunk-format.c

index 2c1fecf1c3e5e1777b827fcf9071d2b2439d0f7e..da191e59a29db6d8ae6b576dc927a9fae35d094a 100644 (file)
@@ -97,6 +97,7 @@ int read_table_of_contents(struct chunkfile *cf,
                           uint64_t toc_offset,
                           int toc_length)
 {
+       int i;
        uint32_t chunk_id;
        const unsigned char *table_of_contents = mfile + toc_offset;
 
@@ -123,6 +124,14 @@ int read_table_of_contents(struct chunkfile *cf,
                        return -1;
                }
 
+               for (i = 0; i < cf->chunks_nr; i++) {
+                       if (cf->chunks[i].id == chunk_id) {
+                               error(_("duplicate chunk ID %"PRIx32" found"),
+                                       chunk_id);
+                               return -1;
+                       }
+               }
+
                cf->chunks[cf->chunks_nr].id = chunk_id;
                cf->chunks[cf->chunks_nr].start = mfile + chunk_offset;
                cf->chunks[cf->chunks_nr].size = next_chunk_offset - chunk_offset;