• J
    drop support for "experimental" loose objects · b039718d
    Jeff King 提交于
    In git v1.4.3, we introduced a new loose object format that
    encoded some object information outside of the zlib stream.
    Ultimately the format was dropped in v1.5.3, but we kept the
    reading side around to help people migrate objects. Each
    time we open a loose object, we use a heuristic to check
    whether it is in the normal loose format, or the
    experimental one.
    
    This heuristic is robust in the face of valid data, but it
    tends to treat corrupted or garbage data as an experimental
    object. With the regular format, we would notice quickly
    that zlib's crc does not check out and complain. With the
    experimental object, we are likely to extract a nonsensical
    object size and try to allocate a huge buffer, resulting in
    xmalloc calling "die".
    
    This latter behavior is much worse, for two reasons. One,
    git reports an allocation error when the real error is
    corruption. And two, the program dies unconditionally, so
    you cannot even run fsck (which would otherwise ignore the
    broken object and keep going).
    
    We could try to improve the heuristic to err on the side of
    normal objects in the face of corruption, but there is
    really little point. The experimental format is long-dead,
    and was never enabled by default to begin with. We can
    instead simply remove it. The only affected repository would
    be one that explicitly set core.legacyheaders in 2007, and
    then never repacked in the intervening 6 years.
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    b039718d
sha1_file.c 76.0 KB