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