Author: jukka
Date: Sun Aug  5 19:51:15 2012
New Revision: 1369655

URL: http://svn.apache.org/viewvc?rev=1369655&view=rev
Log:
COMPRESS-197: Tar file for Android backup cannot be read

Allow more than one or two NUL or space characters at the end of a field

Added:
    commons/proper/compress/trunk/src/test/resources/COMPRESS-197.tar
Modified:
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
    
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java?rev=1369655&r1=1369654&r2=1369655&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
 Sun Aug  5 19:51:15 2012
@@ -130,10 +130,11 @@ public class TarUtils {
             throw new IllegalArgumentException(
                     exceptionMessage(buffer, offset, length, end-1, trailer));
         }
-        // May have additional NUL or space
-        trailer = buffer[end-1];
-        if (trailer == 0 || trailer == ' '){
+        // May have additional NULs or spaces
+        trailer = buffer[end - 1];
+        while (start < end - 1 && (trailer == 0 || trailer == ' ')) {
             end--;
+            trailer = buffer[end - 1];
         }
 
         for ( ;start < end; start++) {

Modified: 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java?rev=1369655&r1=1369654&r2=1369655&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
 (original)
+++ 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
 Sun Aug  5 19:51:15 2012
@@ -20,10 +20,12 @@ package org.apache.commons.compress.arch
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
 import java.util.Calendar;
@@ -120,4 +122,24 @@ public class TarArchiveInputStreamTest {
         }
     }
 
-}
\ No newline at end of file
+    @Test
+    public void testCompress197() throws Exception {
+        TarArchiveInputStream tar = getTestStream("/COMPRESS-197.tar");
+        try {
+            TarArchiveEntry entry = tar.getNextTarEntry();
+            while (entry != null) {
+                entry = tar.getNextTarEntry();
+            }
+        } catch (IOException e) {
+            fail("COMPRESS-197: " + e.getMessage());
+        } finally {
+            tar.close();
+        }
+    }
+
+    private TarArchiveInputStream getTestStream(String name) {
+        return new TarArchiveInputStream(
+                TarArchiveInputStreamTest.class.getResourceAsStream(name));
+    }
+
+}

Added: commons/proper/compress/trunk/src/test/resources/COMPRESS-197.tar
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/resources/COMPRESS-197.tar?rev=1369655&view=auto
==============================================================================
Files commons/proper/compress/trunk/src/test/resources/COMPRESS-197.tar (added) 
and commons/proper/compress/trunk/src/test/resources/COMPRESS-197.tar Sun Aug  
5 19:51:15 2012 differ


Reply via email to