summaryrefslogtreecommitdiff
path: root/builtin/pack-objects.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-07-28 17:34:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-07-28 17:34:42 (GMT)
commitad2d77760434e1650c186c71fa04a8fdbd77266c (patch)
treee6f51ef4203047bda1d108bed7f3ca35196d8b4c /builtin/pack-objects.c
parent2c608e0f7c1f0fb9fb3e42eb737d7b8543e11400 (diff)
parentec9d224903053e045d99c36149703501098b021c (diff)
downloadgit-ad2d77760434e1650c186c71fa04a8fdbd77266c.zip
git-ad2d77760434e1650c186c71fa04a8fdbd77266c.tar.gz
git-ad2d77760434e1650c186c71fa04a8fdbd77266c.tar.bz2
Merge branch 'nd/pack-ofs-4gb-limit'
"git pack-objects" and "git index-pack" mostly operate with off_t when talking about the offset of objects in a packfile, but there were a handful of places that used "unsigned long" to hold that value, leading to an unintended truncation. * nd/pack-ofs-4gb-limit: fsck: use streaming interface for large blobs in pack pack-objects: do not truncate result in-pack object size on 32-bit systems index-pack: correct "offset" type in unpack_entry_data() index-pack: report correct bad object offsets even if they are large index-pack: correct "len" type in unpack_data() sha1_file.c: use type off_t* for object_info->disk_sizep pack-objects: pass length to check_pack_crc() without truncation
Diffstat (limited to 'builtin/pack-objects.c')
-rw-r--r--builtin/pack-objects.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a2f8cfd..92e2e5f 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -342,15 +342,15 @@ static unsigned long write_no_reuse_object(struct sha1file *f, struct object_ent
}
/* Return 0 if we will bust the pack-size limit */
-static unsigned long write_reuse_object(struct sha1file *f, struct object_entry *entry,
- unsigned long limit, int usable_delta)
+static off_t write_reuse_object(struct sha1file *f, struct object_entry *entry,
+ unsigned long limit, int usable_delta)
{
struct packed_git *p = entry->in_pack;
struct pack_window *w_curs = NULL;
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;
@@ -416,11 +416,12 @@ static unsigned long write_reuse_object(struct sha1file *f, struct object_entry
}
/* Return 0 if we will bust the pack-size limit */
-static unsigned long write_object(struct sha1file *f,
- struct object_entry *entry,
- off_t write_offset)
+static off_t write_object(struct sha1file *f,
+ struct object_entry *entry,
+ off_t write_offset)
{
- unsigned long limit, len;
+ unsigned long limit;
+ off_t len;
int usable_delta, to_reuse;
if (!pack_to_stdout)
@@ -492,7 +493,7 @@ static enum write_one_status write_one(struct sha1file *f,
struct object_entry *e,
off_t *offset)
{
- unsigned long size;
+ off_t size;
int recursing;
/*