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);
}