You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Torsten Curdt (JIRA)" <ji...@apache.org> on 2009/01/07 13:54:44 UTC

[jira] Closed: (SANDBOX-30) [compress] TarOutputStream.java long file name bug (and fix!)

     [ https://issues.apache.org/jira/browse/SANDBOX-30?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Torsten Curdt closed SANDBOX-30.
--------------------------------

    Resolution: Fixed
      Assignee: Torsten Curdt

> [compress] TarOutputStream.java long file name bug (and fix!)
> -------------------------------------------------------------
>
>                 Key: SANDBOX-30
>                 URL: https://issues.apache.org/jira/browse/SANDBOX-30
>             Project: Commons Sandbox
>          Issue Type: Bug
>          Components: Compress
>         Environment: Operating System: other
> Platform: All
>            Reporter: Derc Yamasaki
>            Assignee: Torsten Curdt
>         Attachments: patch-longfilename.txt
>
>
> 'LongLink' entries written to a tar file header by
> TarOutputStream.putNextEntry() specify the wrong file name length and data,
> preventing GNU tar from properly reading long file name entries (in the current
> GNU 'tar' implementation, sometimes one gets lucky and the entry happens to be
> null-terminated so it works anyway).  In particular, the file name
> length--stored as an octal string in each header entry--should include an extra
> byte for the null terminator that must also be written at the end of the file
> name in the header.
> Here's what the code in
> org.apache.commons.compress.tar.TarOutputStream.putNextEntry() currently looks
> like (starting around line 424):
> if( m_longFileMode == LONGFILE_GNU ) {
> // create a TarEntry for the LongLink, the contents
> // of which are the entry's name
>   final TarEntry longLinkEntry =
>        new TarEntry( TarConstants.GNU_LONGLINK,
>                      TarConstants.LF_GNUTYPE_LONGNAME );
>   longLinkEntry.setSize( entry.getName().length() );
>   putNextEntry( longLinkEntry );
>   write( entry.getName().getBytes() );
>   //write( 0 );
>   closeEntry();
> }
> Here's what the code should have been:
> if( m_longFileMode == LONGFILE_GNU ) {
> // create a TarEntry for the LongLink, the contents
> // of which are the entry's name
>   final TarEntry longLinkEntry =
>        new TarEntry( TarConstants.GNU_LONGLINK,
>                      TarConstants.LF_GNUTYPE_LONGNAME );
>   longLinkEntry.setSize( entry.getName().length() + 1 );
>   putNextEntry( longLinkEntry );
>   write( entry.getName().getBytes() );
>   write( 0 );
>   closeEntry();
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.