Uploaded image for project: 'Commons Compress'
  1. Commons Compress
  2. COMPRESS-421

TarUtils.parseName does not follow the spec

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 1.4, 1.14
    • Fix Version/s: 1.15
    • Component/s: Archivers
    • Labels:
      None

      Description

      TarUtils.parseName does not stop at the first NUL byte, resulting in non-empty strings where they should be empty.

      This manifests if the tar file contains a star_header struct instead of a posix_header as defined in https://www.gnu.org/software/tar/manual/html_node/Standard.html

      The javadoc on parseName states "Parse an entry name from a buffer. Parsing stops when a NUL is found or the buffer length is reached."

      However, the implementation starts at the end of the buffer and stops when the first non-NUL is found.

      The solution is to replace:

        int len = length;
        for (; len > 0; len--) {
          if (buffer[offset + len - 1] != 0) {
            break;
          }
        }
      

      by

        int len = 0;
        for (int i = offset; len < length && buffer[i] != 0; i++, len++);
      

      This has been introduce in commit https://git-wip-us.apache.org/repos/asf?p=commons-compress.git;a=commitdiff;h=69ceb4e14feb6273c06c1e35ba116b6783bb3278

        Attachments

        1. foo.tar.gz
          110 kB
          Roel Spilker

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              r.spilker Roel Spilker
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: