Author: sebb
Date: Wed Mar 23 12:50:15 2011
New Revision: 1084567

URL: http://svn.apache.org/viewvc?rev=1084567&view=rev
Log:
COMPRESS-117 Certain tar files not recognised by ArchiveStreamFactory
Check if first entry can be read as a Tar entry

Modified:
    commons/proper/compress/trunk/src/changes/changes.xml
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java

Modified: commons/proper/compress/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1084567&r1=1084566&r2=1084567&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Wed Mar 23 12:50:15 
2011
@@ -45,6 +45,9 @@ The <action> type attribute can be add,u
   </properties>
   <body>
     <release version="1.2" date="as in SVN" description="Release 1.2">
+      <action issue="COMPRESS-117" type="update" date="2011-03-23">
+        Certain tar files not recognised by ArchiveStreamFactory.
+      </action> 
       <action issue="COMPRESS-125" type="fix" date="2011-03-23">
         BZip2CompressorInputStream throws IOException if underlying stream 
returns available() == 0.
         Removed the check.

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=1084567&r1=1084566&r2=1084567&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 Wed Mar 23 12:50:15 2011
@@ -18,6 +18,7 @@
  */
 package org.apache.commons.compress.archivers;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -216,6 +217,14 @@ public class ArchiveStreamFactory {
             if (TarArchiveInputStream.matches(tarheader, signatureLength)) {
                 return new TarArchiveInputStream(in);
             }
+            // COMPRESS-117 - improve auto-recognition
+            try {
+                TarArchiveInputStream tais = new TarArchiveInputStream(new 
ByteArrayInputStream(tarheader));
+                tais.getNextEntry();
+                return new TarArchiveInputStream(in);
+            } catch (Exception e) { // can generate IllegalArgumentException 
as well as IOException
+                // ignored
+            }
         } catch (IOException e) {
             throw new ArchiveException("Could not use reset and mark 
operations.", e);
         }


Reply via email to