]> git.ipfire.org Git - thirdparty/git.git/commit - pack-revindex.c
pack-revindex: use unsigned to store number of objects
authorJeff King <peff@peff.net>
Wed, 10 Jul 2013 11:50:26 +0000 (07:50 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 12 Jul 2013 16:18:42 +0000 (09:18 -0700)
commit012b32bb46459f96509669c2f5be0a93a95a2b43
treead8e045fe8db9228b0752cccc8bfe365ed3de5f5
parentc334b87b30c1464a1ab563fe1fb8de5eaf0e5bac
pack-revindex: use unsigned to store number of objects

A packfile may have up to 2^32-1 objects in it, so the
"right" data type to use is uint32_t. We currently use a
signed int, which means that we may behave incorrectly for
packfiles with more than 2^31-1 objects on 32-bit systems.

Nobody has noticed because having 2^31 objects is pretty
insane. The linux.git repo has on the order of 2^22 objects,
which is hundreds of times smaller than necessary to trigger
the bug.

Let's bump this up to an "unsigned". On 32-bit systems, this
gives us the correct data-type, and on 64-bit systems, it is
probably more efficient to use the native "unsigned" than a
true uint32_t.

While we're at it, we can fix the binary search not to
overflow in such a case if our unsigned is 32 bits.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-revindex.c