• René Scharfe's avatar
    archive-tar: split long paths more carefully · 22f0dcd9
    René Scharfe authored
    The name field of a tar header has a size of 100 characters.  This limit
    was extended long ago in a backward compatible way by providing the
    additional prefix field, which can hold 155 additional characters.  The
    actual path is constructed at extraction time by concatenating the prefix
    field, a slash and the name field.
    
    get_path_prefix() is used to determine which slash in the path is used as
    the cutting point and thus which part of it is placed into the field
    prefix and which into the field name.  It tries to cram as much into the
    prefix field as possible.  (And only if we can't fit a path into the
    provided 255 characters we use a pax extended header to store it.)
    
    If a path is longer than 100 but shorter than 156 characters and ends
    with a slash (i.e. is for a directory) then get_path_prefix() puts the
    whole path in the prefix field and leaves the name field empty.  GNU tar
    reconstructs the path without complaint, but the tar included with
    NetBSD 6 does not: It reports the header to be invalid.
    
    For compatibility with this version of tar, make sure to never leave the
    name field empty.  In order to do that, trim the trailing slash from the
    part considered as possible prefix, if it exists -- that way the last
    path component (or more, but not less) will end up in the name field.
    Signed-off-by: default avatarRene Scharfe <rene.scharfe@lsrfire.ath.cx>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    22f0dcd9
archive-tar.c 9.17 KB