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

Long directory names can not be stored in a tar archive because of error when writing PAX headers

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.4.1
    • Fix Version/s: 1.5
    • Component/s: Archivers
    • Labels:
      None
    • Environment:

      Ubuntu 12.04 Linux 64 bit, Windows 7 64-bit

      Description

      Trying to add a directory to the TAR Archive that has a name longer than 100 bytes generates an exception with a stack trace similar to the following:

      java.io.IOException: request to write '114' bytes exceeds size in header of '0' bytes for entry './PaxHeaders.X/layers/openstreetmap__osm.disy.net/.tiles/1.0.0/openstreetmap__osm.disy.net/default/'
      
                  at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.write(TarArchiveOutputStream.java:385)
      
                  at java.io.OutputStream.write(Unknown Source)
      
                  at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.writePaxHeaders(TarArchiveOutputStream.java:485)
      
                  at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.putArchiveEntry(TarArchiveOutputStream.java:312)
      
                  at net.disy.lib.io.tar.TarUtilities.addFile(TarUtilities.java:116)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:158)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.addDirectory(TarUtilities.java:162)
      
                  at net.disy.lib.io.tar.TarUtilities.tar(TarUtilities.java:77)
      
                  at net.disy.lib.io.tar.TarUtilities.tar(TarUtilities.java:42)
      
                  at net.disy.gisterm.tilecacheset.export.TileCacheSetExporter.tarTreeStructure(TileCacheSetExporter.java:262)
      
                  at net.disy.gisterm.tilecacheset.export.TileCacheSetExporter.export(TileCacheSetExporter.java:111)
      
                  at net.disy.gisterm.tilecacheset.desktop.controller.ExportController$1.run(ExportController.java:81)
      
                  ... 2 more
      

      Informal source code investigation points to the problem being that for directory entries the code assumes that the length is 0 in putArchiveEntry (see TarArchiveOutputStream:321 ) but when writing the data, it actually writes some data (the filename) and the length written (filename size) is larger than the length expected (0).

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              aggregat4 Boris Terzic
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: