[PATCH v3 16/17] chunk-format: restore duplicate chunk checks
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Feb 5, 2021, 14:30 UTC
- Message-ID
- <b9a1bddf615fc1d725ffd1203669d0158296334d.1612535453.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.848.v3.git.1612535452.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>
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> --- chunk-format.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/chunk-format.c b/chunk-format.c index bc9d4caf7276..e4889d9efcd1 100644 --- a/chunk-format.c +++ b/chunk-format.c @@ -98,6 +98,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; @@ -124,6 +125,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;
-- gitgitgadget