This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git


The following commit(s) were added to refs/heads/master by this push:
     new d2e3dafd1 [COMPRESS-718] Adjust size validation for OLD_ASCII format 
(#759)
d2e3dafd1 is described below

commit d2e3dafd10560f643c5ec1ad21c56ecb99fba68a
Author: Anay Wadhera <[email protected]>
AuthorDate: Tue Jan 20 17:05:19 2026 -0500

    [COMPRESS-718] Adjust size validation for OLD_ASCII format (#759)
    
    * Adjust size validation for OLD_ASCII format
    
    Support files up to 8GiB in size for a single entry when using the 
OLD_ASCII format.
    
    * Use camel-case
    
    ---------
    
    Co-authored-by: Gary Gregory <[email protected]>
---
 .../commons/compress/archivers/cpio/CpioArchiveEntry.java |  4 +++-
 .../compress/archivers/cpio/CpioArchiveEntryTest.java     | 15 +++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

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 4df118774..1405a6f50 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
@@ -911,7 +911,9 @@ public void setRemoteDeviceMin(final long rmin) {
      * @param size The file size to set.
      */
     public void setSize(final long size) {
-        if (size < 0 || size > 0xFFFFFFFFL) {
+        // When using the OLD_ASCII format, files can be up to 8GiB in size.
+        final long maxSize = this.fileFormat == FORMAT_OLD_ASCII ? 
0x1FFFFFFFFL : 0xFFFFFFFFL;
+        if (size < 0 || size > maxSize) {
             throw new IllegalArgumentException("Invalid entry size <" + size + 
">");
         }
         this.fileSize = size;
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntryTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntryTest.java
index df6ad6910..554798e83 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntryTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntryTest.java
@@ -23,9 +23,24 @@
 
 import org.apache.commons.compress.archivers.ArchiveException;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 class CpioArchiveEntryTest {
 
+    @ParameterizedTest
+    @ValueSource(shorts = {CpioConstants.FORMAT_NEW, 
CpioConstants.FORMAT_NEW_CRC, CpioConstants.FORMAT_OLD_BINARY})
+    void testCpioEntrySizeUnder4GiBNotOldAsciiFormat(short format) {
+        final CpioArchiveEntry entry = new CpioArchiveEntry(format);
+        assertThrows(IllegalArgumentException.class, () -> 
entry.setSize(0x1FFFFFFFFL));
+    }
+
+    @Test
+    void testCpioEntrySizeOldAsciiFormatOver4GiB() {
+        final CpioArchiveEntry entry = new 
CpioArchiveEntry(CpioConstants.FORMAT_OLD_ASCII);
+        entry.setSize(0x1FFFFFFFFL);
+    }
+
     @Test
     void testGetHeaderPadCountOverflow() throws Exception {
         final CpioArchiveEntry entry = new 
CpioArchiveEntry(CpioConstants.FORMAT_NEW);

Reply via email to