• J
    prepare_packed_git_one: refactor duplicate-pack check · 47bf4b0f
    Jeff King 提交于
    When we are reloading the list of packs, we check whether a
    particular pack has been loaded. This is slightly tricky,
    because we load packs based on the presence of their ".idx"
    files, but record the name of the matching ".pack" file.
    Therefore we want to compare their bases.
    
    The existing code stripped off ".idx" from a file we found,
    then compared that whole base length to strings containing
    the ".pack" version. This meant we could end up comparing
    bytes past what the ".pack" string contained, if the ".idx"
    file name was much longer.
    
    In practice, it worked OK because memcmp would end up seeing
    a difference in the two strings and would return early
    before hitting the full length. However, memcmp may
    sometimes read extra bytes past a difference (e.g., because
    it is comparing 64-bit words), or is even free to compare in
    reverse order.
    
    Furthermore, our memcmp made no guarantees that we matched
    the whole pack name, up to ".pack". So "foo.idx" would match
    "foo-bar.pack", which is wrong (but does not typically
    happen, because our pack names have a fixed size).
    
    We can fix both issues, avoid magic numbers, and document
    that we expect to compare against a string with ".pack" by
    using strip_suffix.
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    47bf4b0f
sha1_file.c 80.7 KB