• Joe Tsai's avatar
    archive/tar: forbid NUL character in string fields · 019d8a07
    Joe Tsai authored
    USTAR and GNU strings are NUL-terminated. Thus, we should never
    allow the NUL terminator, otherwise we will lose data round-trip.
    
    Relevant specification text:
    <<<
    The fields magic, uname, and gname are character strings each terminated by a NUL character.
    >
    > Technically, PAX keys and values should be UTF-8, but the observance
    > of invalid files in the wild causes us to be more liberal.
    > <<<
    > The <length> field, <blank>, <equals-sign>, and <newline> shown shall
    > be limited to the portable character set, as encoded in UTF-8.
    
    Thus, we only reject NULs in PAX keys, and NULs for PAX values
    representing the USTAR string fields (i.e., path, linkpath, uname, gname).
    These are treated more strictly because they represent strings that
    are typically represented as C-strings on POSIX systems.
    
    Change-Id: I305b794d9d966faad852ff660bd0b3b0964e52bf
    Reviewed-on: https://go-review.googlesource.com/14724
    Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    019d8a07