diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2016-07-05 19:05:54 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-07-12 10:14:29 -0700 |
commit | 211c61c6cf56699fc7b520a0206d23f5e4a7261b (patch) | |
tree | 43035095197759a16d0cccb92af4264d29ad4b8e /builtin | |
parent | Git 2.8.4 (diff) | |
download | tgif-211c61c6cf56699fc7b520a0206d23f5e4a7261b.tar.xz |
pack-objects: pass length to check_pack_crc() without truncation
On 32 bit systems with large file support, unsigned long is 32-bit
while the two offsets in the subtraction expression (pack-objects has
the exact same expression as in sha1_file.c but not shown in diff) are
in 64-bit. If an in-pack object is larger than 2^32 len/datalen is
truncated and we get a misleading "error: bad packed object CRC for
..." as a result.
Use off_t for len and datalen. check_pack_crc() already accepts this
argument as off_t and can deal with 4+ GB.
Noticed-by: Christoph Michelbach <michelbach94@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/pack-objects.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index b6664ce4d8..a3a98c5741 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -349,7 +349,7 @@ static unsigned long write_reuse_object(struct sha1file *f, struct object_entry struct revindex_entry *revidx; off_t offset; enum object_type type = entry->type; - unsigned long datalen; + off_t datalen; unsigned char header[10], dheader[10]; unsigned hdrlen; |