Skip to content
  • Junio C Hamano's avatar
    index: be careful when handling long names · 7fec10b7
    Junio C Hamano authored
    
    
    We currently use lower 12-bit (masked with CE_NAMEMASK) in the
    ce_flags field to store the length of the name in cache_entry,
    without checking the length parameter given to
    create_ce_flags().  This can make us store incorrect length.
    
    Currently we are mostly protected by the fact that many
    codepaths first copy the path in a variable of size PATH_MAX,
    which typically is 4096 that happens to match the limit, but
    that feels like a bug waiting to happen.  Besides, that would
    not allow us to shorten the width of CE_NAMEMASK to use the bits
    for new flags.
    
    This redefines the meaning of the name length stored in the
    cache_entry.  A name that does not fit is represented by storing
    CE_NAMEMASK in the field, and the actual length needs to be
    computed by actually counting the bytes in the name[] field.
    This way, only the unusually long paths need to suffer.
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7fec10b7