diff options
Diffstat (limited to 'packfile.c')
-rw-r--r-- | packfile.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/packfile.c b/packfile.c index 89402cfc69..11bb262482 100644 --- a/packfile.c +++ b/packfile.c @@ -324,7 +324,8 @@ void close_pack_index(struct packed_git *p) } } -void close_pack_revindex(struct packed_git *p) { +static void close_pack_revindex(struct packed_git *p) +{ if (!p->revindex_map) return; @@ -1060,7 +1061,7 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep) { unsigned shift; - unsigned long size, c; + size_t size, c; unsigned long used = 0; c = buf[used++]; @@ -1068,16 +1069,16 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf, size = c & 15; shift = 4; while (c & 0x80) { - if (len <= used || bitsizeof(long) <= shift) { + if (len <= used || (bitsizeof(long) - 7) <= shift) { error("bad object header"); size = used = 0; break; } c = buf[used++]; - size += (c & 0x7f) << shift; + size = st_add(size, st_left_shift(c & 0x7f, shift)); shift += 7; } - *sizep = size; + *sizep = cast_size_t_to_ulong(size); return used; } |