mirror of https://github.com/git/git.git
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>
This commit is contained in:
parent
329fac3a36
commit
5387fefadc
|
@ -97,6 +97,7 @@ int read_table_of_contents(struct chunkfile *cf,
|
||||||
uint64_t toc_offset,
|
uint64_t toc_offset,
|
||||||
int toc_length)
|
int toc_length)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
uint32_t chunk_id;
|
uint32_t chunk_id;
|
||||||
const unsigned char *table_of_contents = mfile + toc_offset;
|
const unsigned char *table_of_contents = mfile + toc_offset;
|
||||||
|
|
||||||
|
@ -123,6 +124,14 @@ int read_table_of_contents(struct chunkfile *cf,
|
||||||
return -1;
|
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].id = chunk_id;
|
||||||
cf->chunks[cf->chunks_nr].start = mfile + chunk_offset;
|
cf->chunks[cf->chunks_nr].start = mfile + chunk_offset;
|
||||||
cf->chunks[cf->chunks_nr].size = next_chunk_offset - chunk_offset;
|
cf->chunks[cf->chunks_nr].size = next_chunk_offset - chunk_offset;
|
||||||
|
|
Loading…
Reference in New Issue