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

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

commit fdc2aba7869091cd0ee03af173311c6604cbbd07
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Aug 10 17:58:11 2026 -0400

    CpioArchiveEntry now throws ArchiveException instead of
    IllegalArgumentException.
---
 src/changes/changes.xml                            |  1 +
 .../compress/archivers/cpio/CpioArchiveEntry.java  | 51 ++++++++++++----------
 .../archivers/cpio/CpioArchiveEntryTest.java       |  6 +--
 3 files changed, 33 insertions(+), 25 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e1485cf61..cccdaf14e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -132,6 +132,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" issue="COMPRESS-711" dev="pkarwasz" due-to="Piotr P. 
Karwasz">Fix checksum calculation in CpioArchiveInputStream when reading with a 
non-zero offset.</action>
       <action type="fix" issue="COMPRESS-718" dev="ggregory" due-to="Anay 
Wadhera, Gary Gregory">CpioArchiveEntry does not allow files over 4GB in 
OLD_ASCII format.</action>
       <action type="fix" dev="ggregory" due-to="Christopher Linke, Gary 
Gregory">Throw ArchiveException instead of EOFException when CPIO name size 
less than or equal to 0 #771.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">CpioArchiveEntry 
now throws ArchiveException instead of IllegalArgumentException.</action>
       <!-- FIX gzip -->
       <action type="fix" dev="ggregory" due-to="Gary 
Gregory">GzipParameters.setOperatingSystem(int) now throws CompressorException 
on illegal input.</action>
       <action type="fix" issue="COMPRESS-705" dev="ggregory" due-to="Mario 
Fredenhagen, Gary Gregory">GZip IOException: Extra subfield length exceeds 
remaining bytes in extra field; use new option 
GzipCompressorInputStream.Builder.setIgnoreExtraField(boolean).</action>
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 aede81125..00b10f9f5 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
@@ -211,8 +211,9 @@ public class CpioArchiveEntry implements CpioConstants, 
ArchiveEntry {
      *
      * @param inputFile The file to gather information from.
      * @param entryName The name of this entry.
+     * @throws ArchiveException Thrown if the file type cannot be determined.
      */
-    public CpioArchiveEntry(final File inputFile, final String entryName) {
+    public CpioArchiveEntry(final File inputFile, final String entryName) 
throws ArchiveException {
         this(FORMAT_NEW, inputFile, entryName);
     }
 
@@ -235,15 +236,16 @@ public CpioArchiveEntry(final Path inputPath, final 
String entryName, final Link
      * @param format The cpio format for this entry.
      *               <p>
      *               Possible format values are:
-     *
+     *               </p>
      *               <pre>
      * CpioConstants.FORMAT_NEW
      * CpioConstants.FORMAT_NEW_CRC
      * CpioConstants.FORMAT_OLD_BINARY
      * CpioConstants.FORMAT_OLD_ASCII
      *               </pre>
+     * @throws ArchiveException Thrown if the format is not recognized.
      */
-    public CpioArchiveEntry(final short format) {
+    public CpioArchiveEntry(final short format) throws ArchiveException {
         switch (format) {
         case FORMAT_NEW:
             this.headerSize = 110;
@@ -262,7 +264,7 @@ public CpioArchiveEntry(final short format) {
             this.alignmentBoundary = 2;
             break;
         default:
-            throw new IllegalArgumentException("Unknown header type " + 
format);
+            throw new ArchiveException("Unknown header type " + format);
         }
         this.fileFormat = format;
     }
@@ -275,24 +277,24 @@ public CpioArchiveEntry(final short format) {
      * @param entryName The name of this entry.
      *                  <p>
      *                  Possible format values are:
-     *
+     *                  </p>
      *                  <pre>
      * CpioConstants.FORMAT_NEW
      * CpioConstants.FORMAT_NEW_CRC
      * CpioConstants.FORMAT_OLD_BINARY
      * CpioConstants.FORMAT_OLD_ASCII
      *                  </pre>
-     *
+     * @throws ArchiveException Thrown if the file type cannot be determined.
      * @since 1.1
      */
-    public CpioArchiveEntry(final short format, final File inputFile, final 
String entryName) {
+    public CpioArchiveEntry(final short format, final File inputFile, final 
String entryName) throws ArchiveException {
         this(format, entryName, inputFile.isFile() ? inputFile.length() : 0);
         if (inputFile.isDirectory()) {
             setMode(C_ISDIR);
         } else if (inputFile.isFile()) {
             setMode(C_ISREG);
         } else {
-            throw new IllegalArgumentException("Cannot determine type of file 
" + inputFile.getName());
+            throw new ArchiveException("Cannot determine type of file " + 
inputFile.getName());
         }
         // TODO set other fields as needed
         setTimeMillis(inputFile.lastModified());
@@ -306,16 +308,16 @@ public CpioArchiveEntry(final short format, final File 
inputFile, final String e
      * @param entryName The name of this entry.
      *                  <p>
      *                  Possible format values are:
-     *
+     *                  </p>
      *                  <pre>
      * CpioConstants.FORMAT_NEW
      * CpioConstants.FORMAT_NEW_CRC
      * CpioConstants.FORMAT_OLD_BINARY
      * CpioConstants.FORMAT_OLD_ASCII
      *                  </pre>
-     *
      * @param options   options indicating how symbolic links are handled.
      * @throws IOException if an I/O error occurs.
+     * @throws ArchiveException Thrown if the file type cannot be determined.
      * @since 1.21
      */
     public CpioArchiveEntry(final short format, final Path inputPath, final 
String entryName, final LinkOption... options) throws IOException {
@@ -325,7 +327,7 @@ public CpioArchiveEntry(final short format, final Path 
inputPath, final String e
         } else if (Files.isRegularFile(inputPath, options)) {
             setMode(C_ISREG);
         } else {
-            throw new IllegalArgumentException("Cannot determine type of file 
" + inputPath);
+            throw new ArchiveException("Cannot determine type of file " + 
inputPath);
         }
         // TODO set other fields as needed
         setTime(Files.getLastModifiedTime(inputPath, options));
@@ -338,17 +340,17 @@ public CpioArchiveEntry(final short format, final Path 
inputPath, final String e
      * @param name   The name of this entry.
      *               <p>
      *               Possible format values are:
-     *
+     *               </p>
      *               <pre>
      * CpioConstants.FORMAT_NEW
      * CpioConstants.FORMAT_NEW_CRC
      * CpioConstants.FORMAT_OLD_BINARY
      * CpioConstants.FORMAT_OLD_ASCII
      *               </pre>
-     *
+     * @throws ArchiveException Thrown if the format is not recognized.
      * @since 1.1
      */
-    public CpioArchiveEntry(final short format, final String name) {
+    public CpioArchiveEntry(final short format, final String name) throws 
ArchiveException {
         this(format);
         this.name = name;
     }
@@ -361,7 +363,7 @@ public CpioArchiveEntry(final short format, final String 
name) {
      * @param size   The size of this entry
      *               <p>
      *               Possible format values are:
-     *
+     *               </p>
      *               <pre>
      * CpioConstants.FORMAT_NEW
      * CpioConstants.FORMAT_NEW_CRC
@@ -369,9 +371,10 @@ public CpioArchiveEntry(final short format, final String 
name) {
      * CpioConstants.FORMAT_OLD_ASCII
      *               </pre>
      *
+     * @throws ArchiveException Thrown if the size is negative, exceeds the 
maximum size for the format, or the format is not recognized..
      * @since 1.1
      */
-    public CpioArchiveEntry(final short format, final String name, final long 
size) {
+    public CpioArchiveEntry(final short format, final String name, final long 
size) throws ArchiveException {
         this(format, name);
         setSize(size);
     }
@@ -380,8 +383,9 @@ public CpioArchiveEntry(final short format, final String 
name, final long size)
      * Creates a CpioArchiveEntry with a specified name. The format of this 
entry will be the new format.
      *
      * @param name The name of this entry.
+     * @throws ArchiveException Thrown if the {@link CpioConstants#FORMAT_NEW} 
is not recognized.
      */
-    public CpioArchiveEntry(final String name) {
+    public CpioArchiveEntry(final String name) throws ArchiveException {
         this(FORMAT_NEW, name);
     }
 
@@ -390,8 +394,9 @@ public CpioArchiveEntry(final String name) {
      *
      * @param name The name of this entry.
      * @param size The size of this entry.
+     * @throws ArchiveException Thrown if the size is negative or exceeds the 
maximum size for the format.
      */
-    public CpioArchiveEntry(final String name, final long size) {
+    public CpioArchiveEntry(final String name, final long size) throws 
ArchiveException {
         this(name);
         setSize(size);
     }
@@ -836,8 +841,9 @@ public void setInode(final long inode) {
      * Sets the mode of this entry (for example directory, regular file).
      *
      * @param mode The mode to set.
+     * @throws ArchiveException Thrown if the mode is not recognized.
      */
-    public void setMode(final long mode) {
+    public void setMode(final long mode) throws ArchiveException {
         final long maskedMode = mode & S_IFMT;
         switch ((int) maskedMode) {
         case C_ISDIR:
@@ -850,7 +856,7 @@ public void setMode(final long mode) {
         case C_ISNWK:
             break;
         default:
-            throw new IllegalArgumentException("Unknown mode. Full: " + 
Long.toHexString(mode) + " Masked: " + Long.toHexString(maskedMode));
+            throw new ArchiveException("Unknown mode. Full: " + 
Long.toHexString(mode) + " Masked: " + Long.toHexString(maskedMode));
         }
         this.mode = mode;
     }
@@ -910,12 +916,13 @@ public void setRemoteDeviceMin(final long rmin) {
      * Sets the file size.
      *
      * @param size The file size to set.
+     * @throws ArchiveException Thrown if the size is negative or exceeds the 
maximum size for the format.
      */
-    public void setSize(final long size) {
+    public void setSize(final long size) throws ArchiveException {
         // 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 + 
">");
+            throw new ArchiveException("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 c5311598c..2bbb86870 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
@@ -29,16 +29,16 @@
 class CpioArchiveEntryTest {
 
     @Test
-    void testCpioEntrySizeOldAsciiFormatOver4GiB() {
+    void testCpioEntrySizeOldAsciiFormatOver4GiB() throws ArchiveException {
         final CpioArchiveEntry entry = new 
CpioArchiveEntry(CpioConstants.FORMAT_OLD_ASCII);
         entry.setSize(0x1FFFFFFFFL);
     }
 
     @ParameterizedTest
     @ValueSource(shorts = {CpioConstants.FORMAT_NEW, 
CpioConstants.FORMAT_NEW_CRC, CpioConstants.FORMAT_OLD_BINARY})
-    void testCpioEntrySizeUnder4GiBNotOldAsciiFormat(final short format) {
+    void testCpioEntrySizeUnder4GiBNotOldAsciiFormat(final short format) 
throws ArchiveException {
         final CpioArchiveEntry entry = new CpioArchiveEntry(format);
-        assertThrows(IllegalArgumentException.class, () -> 
entry.setSize(0x1FFFFFFFFL));
+        assertThrows(ArchiveException.class, () -> 
entry.setSize(0x1FFFFFFFFL));
     }
 
     @Test

Reply via email to