Unverified Commit 1b929b3d by Edward Thomson Committed by GitHub

Merge pull request #6530 from libgit2/cmn/pack-index-64

pack: use 64 bits for the number of objects
parents 8f8e805e 1d57344c
...@@ -200,7 +200,7 @@ static void pack_index_free(struct git_pack_file *p) ...@@ -200,7 +200,7 @@ static void pack_index_free(struct git_pack_file *p)
static int pack_index_check_locked(const char *path, struct git_pack_file *p) static int pack_index_check_locked(const char *path, struct git_pack_file *p)
{ {
struct git_pack_idx_header *hdr; struct git_pack_idx_header *hdr;
uint32_t version, nr, i, *index; uint32_t version, nr = 0, i, *index;
void *idx_map; void *idx_map;
size_t idx_size; size_t idx_size;
struct stat st; struct stat st;
...@@ -246,7 +246,6 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p) ...@@ -246,7 +246,6 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
version = 1; version = 1;
} }
nr = 0;
index = idx_map; index = idx_map;
if (version > 1) if (version > 1)
...@@ -269,7 +268,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p) ...@@ -269,7 +268,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
* - 20/32-byte SHA of the packfile * - 20/32-byte SHA of the packfile
* - 20/32-byte SHA file checksum * - 20/32-byte SHA file checksum
*/ */
if (idx_size != (4 * 256 + (nr * (p->oid_size + 4)) + (p->oid_size * 2))) { if (idx_size != (4 * 256 + ((uint64_t) nr * (p->oid_size + 4)) + (p->oid_size * 2))) {
git_futils_mmap_free(&p->index_map); git_futils_mmap_free(&p->index_map);
return packfile_error("index is corrupted"); return packfile_error("index is corrupted");
} }
...@@ -287,8 +286,8 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p) ...@@ -287,8 +286,8 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
* variable sized table containing 8-byte entries * variable sized table containing 8-byte entries
* for offsets larger than 2^31. * for offsets larger than 2^31.
*/ */
unsigned long min_size = 8 + (4 * 256) + (nr * (p->oid_size + 4 + 4)) + (p->oid_size * 2); uint64_t min_size = 8 + (4 * 256) + ((uint64_t)nr * (p->oid_size + 4 + 4)) + (p->oid_size * 2);
unsigned long max_size = min_size; uint64_t max_size = min_size;
if (nr) if (nr)
max_size += (nr - 1)*8; max_size += (nr - 1)*8;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment