You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2017/03/29 12:33:44 UTC

[3/3] commons-compress git commit: ensure CPIO only uses the least-significant 32bit of CRC

ensure CPIO only uses the least-significant 32bit of CRC

https://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt

> The CRC format is identical to the new ASCII format described in the previous section except that the magic field is set to ``070702'' and the check field is set to the sum of all bytes in the file data. This sum is computed treating all bytes as unsigned values and using unsigned arithmetic. Only the least-significant 32 bits of the sum are stored.


Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/b893471b
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/b893471b
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/b893471b

Branch: refs/heads/master
Commit: b893471b95285cc2364e3b2b8f6220ac6dc362a4
Parents: 44d376b
Author: Stefan Bodewig <bo...@apache.org>
Authored: Wed Mar 29 14:32:40 2017 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Wed Mar 29 14:32:40 2017 +0200

----------------------------------------------------------------------
 .../apache/commons/compress/archivers/cpio/CpioArchiveEntry.java | 4 ++--
 .../commons/compress/archivers/cpio/CpioArchiveOutputStream.java | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/b893471b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
index f625dcf..e5675f0 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
@@ -376,7 +376,7 @@ public class CpioArchiveEntry implements CpioConstants, ArchiveEntry {
      */
     public long getChksum() {
         checkNewFormat();
-        return this.chksum;
+        return this.chksum & 0xFFFFFFFFL;
     }
 
     /**
@@ -679,7 +679,7 @@ public class CpioArchiveEntry implements CpioConstants, ArchiveEntry {
      */
     public void setChksum(final long chksum) {
         checkNewFormat();
-        this.chksum = chksum;
+        this.chksum = chksum & 0xFFFFFFFFL;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/b893471b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
index 02a53b8..88ec07e 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
@@ -434,6 +434,7 @@ public class CpioArchiveOutputStream extends ArchiveOutputStream implements
         if (this.entry.getFormat() == FORMAT_NEW_CRC) {
             for (int pos = 0; pos < len; pos++) {
                 this.crc += b[pos] & 0xFF;
+                this.crc &= 0xFFFFFFFFL;
             }
         }
         count(len);