Skip to content
  • Jeff King's avatar
    pack-revindex: use unsigned to store number of objects · 012b32bb
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    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: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    012b32bb