You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2009/03/28 20:33:56 UTC

svn commit: r759561 - in /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio: CpioArchiveEntry.java CpioArchiveInputStream.java

Author: sebb
Date: Sat Mar 28 19:33:56 2009
New Revision: 759561

URL: http://svn.apache.org/viewvc?rev=759561&view=rev
Log:
Mode will be zero for trailers in old format cpio archives too.

Modified:
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java?rev=759561&r1=759560&r2=759561&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java Sat Mar 28 19:33:56 2009
@@ -135,6 +135,9 @@
  * <p>The MAGIC numbers and other constants are defined in {@link CpioConstants}
  * @see "http://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt"
  * 
+ * <p>
+ * N.B. does not handle the cpio "tar" format
+ * </p>
  * @NotThreadSafe
  */
 public class CpioArchiveEntry implements CpioConstants, ArchiveEntry {

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java?rev=759561&r1=759560&r2=759561&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java Sat Mar 28 19:33:56 2009
@@ -348,7 +348,10 @@
 
         ret.setDevice(readAsciiLong(6, 8));
         ret.setInode(readAsciiLong(6, 8));
-        ret.setMode(readAsciiLong(6, 8));
+        final long mode = readAsciiLong(6, 8);
+        if (mode != 0) {
+            ret.setMode(mode);
+        }
         ret.setUID(readAsciiLong(6, 8));
         ret.setGID(readAsciiLong(6, 8));
         ret.setNumberOfLinks(readAsciiLong(6, 8));
@@ -356,7 +359,12 @@
         ret.setTime(readAsciiLong(11, 8));
         long namesize = readAsciiLong(6, 8);
         ret.setSize(readAsciiLong(11, 8));
-        ret.setName(readCString((int) namesize));
+        final String name = readCString((int) namesize);
+        ret.setName(name);
+        if (mode == 0 && !name.equals(CPIO_TRAILER)){
+            // TODO - change this to throw
+            new IOException("Mode 0 only allowed in the trailer. Found: "+name).printStackTrace();
+        }
 
         return ret;
     }
@@ -367,7 +375,10 @@
 
         ret.setDevice(readBinaryLong(2, swapHalfWord));
         ret.setInode(readBinaryLong(2, swapHalfWord));
-        ret.setMode(readBinaryLong(2, swapHalfWord));
+        final long mode = readBinaryLong(2, swapHalfWord);
+        if (mode != 0){
+            ret.setMode(mode);            
+        }
         ret.setUID(readBinaryLong(2, swapHalfWord));
         ret.setGID(readBinaryLong(2, swapHalfWord));
         ret.setNumberOfLinks(readBinaryLong(2, swapHalfWord));
@@ -375,7 +386,12 @@
         ret.setTime(readBinaryLong(4, swapHalfWord));
         long namesize = readBinaryLong(2, swapHalfWord);
         ret.setSize(readBinaryLong(4, swapHalfWord));
-        ret.setName(readCString((int) namesize));
+        final String name = readCString((int) namesize);
+        ret.setName(name);
+        if (mode == 0 && !name.equals(CPIO_TRAILER)){
+            // TODO - change this to throw
+            new IOException("Mode 0 only allowed in the trailer. Found: "+name).printStackTrace();
+        }
         skip(ret.getHeaderPadCount());
 
         return ret;