chunk-format: restore duplicate chunk checks

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>

Derrick Stolee committed Feb 18, 2021 at 14:07 UTC 5387fefadc121cb142e513557997415f2e75188a
1 file changed +9
chunk-format.c
+9
@@ -97,6 +97,7 @@ int read_table_of_contents(struct chunkfile *cf,
97 uint64_t toc_offset,
98 int toc_length)
99 {
100 + int i;
101 uint32_t chunk_id;
102 const unsigned char *table_of_contents = mfile + toc_offset;
103
@@ -123,6 +124,14 @@ int read_table_of_contents(struct chunkfile *cf,
124 return -1;
125 }
126
127 + for (i = 0; i < cf->chunks_nr; i++) {
128 + if (cf->chunks[i].id == chunk_id) {
129 + error(_("duplicate chunk ID %"PRIx32" found"),
130 + chunk_id);
131 + return -1;
132 + }
133 + }
134 +
135 cf->chunks[cf->chunks_nr].id = chunk_id;
136 cf->chunks[cf->chunks_nr].start = mfile + chunk_offset;
137 cf->chunks[cf->chunks_nr].size = next_chunk_offset - chunk_offset;