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 378eb82181c26f1550f1f7c42c981dd355209a94
Author: Gary Gregory <[email protected]>
AuthorDate: Tue Aug 11 07:55:56 2026 -0400

    [7-Zip] AES256Options now throws ArchiveException instead of instead of
    IllegalArgumetException/IllegalStateException.
    
    - AES256SHA256Decoder now throws ArchiveException instead of instead of
    IllegalArgumetException/IllegalStateException.
    - SevenZMethodConfiguration now throws ArchiveException instead of
    instead of IllegalArgumetException/IllegalStateException.
    - SevenZOutputFile now throws ArchiveException instead of instead of
    IllegalArgumetException/IllegalStateException.
---
 src/changes/changes.xml                            | 46 ++++++++++++----------
 .../compress/archivers/sevenz/AES256Options.java   | 23 ++++++-----
 .../archivers/sevenz/AES256SHA256Decoder.java      | 15 ++++---
 .../sevenz/SevenZMethodConfiguration.java          | 11 ++++--
 .../archivers/sevenz/SevenZOutputFile.java         |  8 ++--
 .../archivers/sevenz/SevenZArchiveEntryTest.java   | 11 +++---
 .../sevenz/SevenZMethodConfigurationTest.java      | 20 +++++-----
 7 files changed, 73 insertions(+), 61 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ce248afde..7a586669b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -62,7 +62,11 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary 
Gregory">[7-Zip] Reject short LZMA properties and oversized dictionary in 
LZMADecoder (#784).</action>
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary 
Gregory">[7-Zip] Fix copyOfRange end index in x0017 strong encryption header 
(#786).</action>
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary 
Gregory">[7-Zip] Fix packed stream count check in 
SevenZFile.sanityCheckUnpackInfo (#791).</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
SevenZFile.getInputStream(SevenZArchiveEntry) now throws ArchiveException 
instead of IllehalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
SevenZFile.getInputStream(SevenZArchiveEntry) now throws ArchiveException 
instead of instead of IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
AES256Options now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
AES256SHA256Decoder now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
SevenZMethodConfiguration now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[7-Zip] 
SevenZOutputFile now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX bzip2 -->
       <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[BZip2] BZip2CompressorInputStream now throw CompressorException (a 
subclass of IOException) for invalid or corrupted data, providing more specific 
error reporting.</action>
       <action type="fix" dev="pkarwasz" due-to="Tyler Nighswander, Piotr P. 
Karwasz">[BZip2] BZip2 input streams treat Huffman codes longer than 20 bits as 
corrupted data, matching the behavior of the reference implementation.</action>
@@ -73,12 +77,12 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="pkarwasz" due-to="Piotr P. Karwasz">[Dump] Fix 
DumpArchiveInputStream to correctly handle file names up to 255 bytes 
#711.</action>
       <action type="fix" dev="ggregory" due-to="Philip Betzler-Braun, Gary 
Gregory, Piotr P. Karwasz" issue="COMPRESS-712">[Dump] Unsanitized read causes 
IndexOutOfBoundsException in #749.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory, KALI 
834X">[Dump] DumpArchiveEntry rejects out-of-range directory header count 
(#781).</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Dump] 
DumpArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Dump] 
TapeArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Dump] 
DumpArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Dump] 
TapeArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX zip -->
       <action type="fix" dev="ggregory" due-to="Dominik Stadler, Gary Gregory" 
issue="COMPRESS-598">[Zip] ZipArchiveInputStream.read(byte[], int, int) now 
throws an IOException instead of a NullPointerException.</action>
-      <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[Zip] ZipFile.createBoundedInputStream(long, long) now throws an 
ArchiveException instead of IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[Zip] ZipFile.getContentBeforeFirstLocalFileHeader() now throws an 
ArchiveException instead of IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[Zip] ZipFile.createBoundedInputStream(long, long) now throws an 
ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[Zip] ZipFile.getContentBeforeFirstLocalFileHeader() now throws an 
ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[Zip] 
ExplodingInputStream now throws ArchiveException instead of 
ArithmeticException.</action>
       <action type="fix" dev="ggregory" due-to="Tyler Nighswander, Gary 
Gregory">[Zip] ZipArchiveInputStream.read() now throws an IOException instead 
of java.lang.ArrayIndexOutOfBoundsException.</action>
       <action type="fix" dev="ggregory" due-to="Stanislav Fort, Gary 
Gregory">[Zip] ZipArchiveInputStream now throws an MemoryLimitException instead 
of ArchiveException, or OutOfMemoryError when running with low memory settings 
set on the command line.</action>
@@ -98,26 +102,26 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary Gregory, KALI 834X">[TAR] 
Reject tar sparse blocks larger than the entry size (#780).</action>
       <action type="fix" dev="ggregory" due-to="OldTruckDriver, Gary Gregory" 
issue="COMPRESS-724">[TAR] Fix TAR PAX 1.x sparse header alignment 
(#775).</action>
       <action type="fix" dev="ggregory" due-to="subbudvk, Gary Gregory" 
issue="COMPRESS-723">[TAR] TAR PAX header parsing: enforce memory bound to 
mitigate resource exhaustion from oversized headers (#770).</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDataOffset(long) now throw ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDevMajor(int) now throw ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDevMinor(int) now throw ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setSize(long) now throw ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.addPaxHeader(String, String) now throws ArchiveException 
instead of IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDataOffset(long) now throw ArchiveException instead of 
instead of IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDevMajor(int) now throw ArchiveException instead of instead 
of IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setDevMinor(int) now throw ArchiveException instead of instead 
of IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.setSize(long) now throw ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveEntry.addPaxHeader(String, String) now throws ArchiveException 
instead of instead of IllegalArgumetException/IllegalStateException.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] TAR 
ParsingUtils now throws the IOException subclass CompressException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveOutputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] TarUtils 
now throws ArchiveException instead of IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveOutputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] 
TarArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[TAR] TarUtils 
now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX ar -->
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[AR] 
ArArchiveInputStream.readGNUStringTable(byte[], int, int) now provides a better 
exception message, wrapping the underlying exception.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[AR] 
ArArchiveInputStream.read(byte[], int, int) now throws ArchiveException instead 
of ArithmeticException.</action>
       <action type="fix" dev="pkarwasz" due-to="Tyler Nighswander">[AR] 
Simplify handling of special AR records in ArArchiveInputStream.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[AR] Most 
ArArchiveEntry constructors now throws the IOException subclass 
ArchiveException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[AR] 
ArArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[AR] 
ArArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX arj -->
       <action type="fix" dev="pkarwasz" due-to="Piotr P. Karwasz">[ARJ] 
Correct byte accounting and truncation errors in ARJ input stream.</action>
       <action type="fix" dev="pkarwasz" due-to="Piotr P. Karwasz">[ARJ] Add 
strict header validation in ARJ input stream and `selfExtracting` 
option.</action>
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary Gregory">[ARJ] 
Reject missing main header in ArjArchiveInputStream.readMainHeader 
(#793).</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[ARJ] 
ArjArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[ARJ] 
ArjArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX unpack200 -->
       <action type="fix" dev="ggregory" due-to="Gary Gregory, Stanislav 
Fort">[Unpack200] org.apache.commons.compress.harmony.unpack200 now throws 
Pack200Exception, IllegalArgumentException, and IllegalStateException instead 
of other runtime exceptions and Error.</action>
       <action type="fix" dev="pkarwasz" due-to="Piotr P. Karwasz">[Unpack200] 
Enforce strict attribute layout parsing in Pack200.</action>
@@ -136,8 +140,8 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" issue="COMPRESS-711" dev="pkarwasz" due-to="Piotr P. 
Karwasz">[Cpio] 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">[Cpio] CpioArchiveEntry does not allow files over 4GB in 
OLD_ASCII format.</action>
       <action type="fix" dev="ggregory" due-to="Christopher Linke, Gary 
Gregory">[Cpio] 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">[Cpio] 
CpioArchiveEntry now throws ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Cpio] 
CpioArchiveInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Cpio] 
CpioArchiveEntry now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[Cpio] 
CpioArchiveInputStream now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX gzip -->
       <action type="fix" dev="ggregory" due-to="Gary Gregory">[GZip] 
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] GZip IOException: Extra subfield length 
exceeds remaining bytes in extra field; use new option 
GzipCompressorInputStream.Builder.setIgnoreExtraField(boolean).</action>
@@ -147,10 +151,10 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary 
Gregory">[Deflate64] Reject invalid literal/length and distance codes in 
Deflate64 decoder (#785).</action>
       <!-- FIX lz77 -->
       <action type="fix" dev="ggregory" due-to="KALI 834X, Gary 
Gregory">[LZ77] Reject back-reference offset larger than the window in lz77 
decoder class AbstractLZ77CompressorInputStream (#797).</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ77] 
AbstractLZ77CompressorInputStream now throws ArchiveException instead of 
IllegalArgumentException.</action>
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ77] 
LZ77Compressor.prefill(byte[]) now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ77] 
AbstractLZ77CompressorInputStream now throws ArchiveException instead of 
instead of IllegalArgumetException/IllegalStateException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ77] 
LZ77Compressor.prefill(byte[]) now throws ArchiveException instead of instead 
of IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX lz4 -->
-      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ4] 
BlockLZ4CompressorOutputStream.prefill(byte[], int, int) now throws 
ArchiveException instead of IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">[LZ4] 
BlockLZ4CompressorOutputStream.prefill(byte[], int, int) now throws 
ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- FIX general -->      
       <action type="fix" dev="ggregory" due-to="Piotr P. Karwasz, Gary 
Gregory">Add missing Javadoc @since tag to 
org.apache.commons.compress.compressors.lz77support.LZ77Compressor.AbstractReference.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Classes in 
org.apache.commons.compress.archivers now throw a subclass of IOException 
called ArchiveException instead of IOException when a formatting problem is 
found.</action>
@@ -187,7 +191,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Add and use 
ArchiveException.requireNonNegative(int, Supplier&lt;String&gt;)</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Add and use 
ArchiveException.requireNonNegative(long, String)</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Add and use 
ArchiveException.requireNonNegative(long, Supplier&lt;String&gt;)</action>
-      <action type="fix" dev="ggregory" due-to="Gary 
Gregory">ArchiveStreamFactory now throws ArchiveException instead of 
IllegalArgumentException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary 
Gregory">ArchiveStreamFactory now throws ArchiveException instead of instead of 
IllegalArgumetException/IllegalStateException.</action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
MemoryLimitException.MemoryLimitException(long, long).</action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
CompressException.CompressException(String, Object...).</action>
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256Options.java 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256Options.java
index 919a1ea14..ccb58e570 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256Options.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256Options.java
@@ -27,8 +27,10 @@
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 
+import org.apache.commons.compress.archivers.ArchiveException;
+
 /**
- * Options for {@link SevenZMethod#AES256SHA256} encoder
+ * Options for {@link SevenZMethod#AES256SHA256} encoder.
  *
  * @since 1.23
  * @see AES256SHA256Decoder
@@ -45,12 +47,12 @@ static SecretKeySpec newSecretKeySpec(final byte[] bytes) {
         return new SecretKeySpec(bytes, ALGORITHM);
     }
 
-    private static byte[] randomBytes(final int size) {
+    private static byte[] randomBytes(final int size) throws ArchiveException {
         final byte[] bytes = new byte[size];
         try {
             SecureRandom.getInstanceStrong().nextBytes(bytes);
         } catch (final NoSuchAlgorithmException e) {
-            throw new IllegalStateException("No strong secure random available 
to generate strong AES key", e);
+            throw new ArchiveException("No strong secure random available to 
generate strong AES key.", (Throwable) e);
         }
         return bytes;
     }
@@ -63,9 +65,12 @@ private static byte[] randomBytes(final int size) {
     private final Cipher cipher;
 
     /**
+     * Creates a new AES256Options with a random salt and IV.
+     *
      * @param password password used for encryption.
+     * @throws ArchiveException No strong secure random available to generate 
strong AES key.
      */
-    AES256Options(final char[] password) {
+    AES256Options(final char[] password) throws ArchiveException {
         this(password, EMPTY_BYTE_ARRAY, randomBytes(16), 19);
     }
 
@@ -75,22 +80,20 @@ private static byte[] randomBytes(final int size) {
      * @param iv             Initialization Vector (IV) used by cipher 
algorithm.
      * @param numCyclesPower another password security enforcer parameter that 
controls the cycles of password hashing. More the this number is high, more
      *                       security you'll have but also high CPU usage.
+     * @throws ArchiveException Encryption error (Check JCE Unlimited Strength 
Jurisdiction Policy Files installation).
      */
-    AES256Options(final char[] password, final byte[] salt, final byte[] iv, 
final int numCyclesPower) {
+    AES256Options(final char[] password, final byte[] salt, final byte[] iv, 
final int numCyclesPower) throws ArchiveException {
         this.salt = salt;
         this.iv = iv;
         this.numCyclesPower = numCyclesPower;
-
         // NOTE: for security purposes, password is wrapped in a Cipher as 
soon as possible to not stay in memory
         final byte[] aesKeyBytes = 
AES256SHA256Decoder.sha256Password(password, numCyclesPower, salt);
         final SecretKey aesKey = newSecretKeySpec(aesKeyBytes);
-
         try {
             cipher = Cipher.getInstance(TRANSFORMATION);
             cipher.init(Cipher.ENCRYPT_MODE, aesKey, new IvParameterSpec(iv));
-        } catch (final GeneralSecurityException generalSecurityException) {
-            throw new IllegalStateException("Encryption error (do you have the 
JCE Unlimited Strength Jurisdiction Policy Files installed?)",
-                    generalSecurityException);
+        } catch (final GeneralSecurityException e) {
+            throw new ArchiveException("Encryption error (Check JCE Unlimited 
Strength Jurisdiction Policy Files installation).", (Throwable) e);
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder.java
 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder.java
index bf82077ab..4c936d6cc 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder.java
@@ -115,9 +115,8 @@ private CipherInputStream init() throws IOException {
                 cipherInputStream = new CipherInputStream(in, cipher);
                 isInitialized = true;
                 return cipherInputStream;
-            } catch (final GeneralSecurityException generalSecurityException) {
-                throw new IllegalStateException("Decryption error (do you have 
the JCE Unlimited Strength Jurisdiction Policy Files installed?)",
-                        generalSecurityException);
+            } catch (final GeneralSecurityException e) {
+                throw new ArchiveException("Decryption error (Check JCE 
Unlimited Strength Jurisdiction Policy Files installation).", (Throwable) e);
             }
         }
 
@@ -196,12 +195,12 @@ public void write(final int b) throws IOException {
         }
     }
 
-    static byte[] sha256Password(final byte[] password, final int 
numCyclesPower, final byte[] salt) {
+    static byte[] sha256Password(final byte[] password, final int 
numCyclesPower, final byte[] salt) throws ArchiveException {
         final MessageDigest digest;
         try {
             digest = MessageDigest.getInstance("SHA-256");
-        } catch (final NoSuchAlgorithmException noSuchAlgorithmException) {
-            throw new IllegalStateException("SHA-256 is unsupported by your 
Java implementation", noSuchAlgorithmException);
+        } catch (final NoSuchAlgorithmException e) {
+            throw new ArchiveException("SHA-256 is unsupported by your Java 
implementation", (Throwable) e);
         }
         final byte[] extra = new byte[8];
         for (long j = 0; j < 1L << numCyclesPower; j++) {
@@ -218,12 +217,12 @@ static byte[] sha256Password(final byte[] password, final 
int numCyclesPower, fi
         return digest.digest();
     }
 
-    static byte[] sha256Password(final char[] password, final int 
numCyclesPower, final byte[] salt) {
+    static byte[] sha256Password(final char[] password, final int 
numCyclesPower, final byte[] salt) throws ArchiveException {
         return sha256Password(utf16Decode(password), numCyclesPower, salt);
     }
 
     /**
-     * Convenience method that encodes Unicode characters into bytes in UTF-16 
(little-endian byte order) charset
+     * Convenience method that encodes Unicode characters into bytes in UTF-16 
(little-endian byte order) charset.
      *
      * @param chars characters to encode.
      * @return encoded characters.
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfiguration.java
 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfiguration.java
index 736002552..eb96ea26c 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfiguration.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfiguration.java
@@ -20,6 +20,8 @@
 
 import java.util.Objects;
 
+import org.apache.commons.compress.archivers.ArchiveException;
+
 /**
  * Combines a SevenZMethod with configuration options for the method.
  *
@@ -72,8 +74,9 @@ public class SevenZMethodConfiguration {
      * Doesn't configure any additional options.
      *
      * @param method The method to use.
+     * @throws ArchiveException if the method can't be configured.
      */
-    public SevenZMethodConfiguration(final SevenZMethod method) {
+    public SevenZMethodConfiguration(final SevenZMethod method) throws 
ArchiveException {
         this(method, null);
     }
 
@@ -82,13 +85,13 @@ public SevenZMethodConfiguration(final SevenZMethod method) 
{
      *
      * @param method  The method to use.
      * @param options The options to use.
-     * @throws IllegalArgumentException if the method doesn't understand the 
options specified.
+     * @throws ArchiveException if the method doesn't understand the options 
specified.
      */
-    public SevenZMethodConfiguration(final SevenZMethod method, final Object 
options) {
+    public SevenZMethodConfiguration(final SevenZMethod method, final Object 
options) throws ArchiveException {
         this.method = method;
         this.options = options;
         if (options != null && 
!Coders.findByMethod(method).isOptionInstance(options)) {
-            throw new IllegalArgumentException("The " + method + " method 
doesn't support options of type " + options.getClass());
+            throw new ArchiveException("The " + method + " method doesn't 
support options of type " + options.getClass());
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
index c2abce6f5..136fa3e3f 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
@@ -334,10 +334,9 @@ public void finish() throws IOException {
         channel.write(bb);
     }
 
-    private Iterable<? extends SevenZMethodConfiguration> 
getContentMethods(final SevenZArchiveEntry entry) {
+    private Iterable<? extends SevenZMethodConfiguration> 
getContentMethods(final SevenZArchiveEntry entry) throws ArchiveException {
         final Iterable<? extends SevenZMethodConfiguration> ms = 
entry.getContentMethods();
         Iterable<? extends SevenZMethodConfiguration> iter = ms == null ? 
contentMethods : ms;
-
         if (aes256Options != null) {
             // prepend encryption
             iter = Stream
@@ -395,8 +394,9 @@ public void putArchiveEntry(final SevenZArchiveEntry 
archiveEntry) {
      * </p>
      *
      * @param method The default compression method.
+     * @throws ArchiveException if the method can't be configured.
      */
-    public void setContentCompression(final SevenZMethod method) {
+    public void setContentCompression(final SevenZMethod method) throws 
ArchiveException {
         setContentMethods(Collections.singletonList(new 
SevenZMethodConfiguration(method)));
     }
 
@@ -420,7 +420,7 @@ public void setContentMethods(final Iterable<? extends 
SevenZMethodConfiguration
 
     private CountingOutputStream setupFileOutputStream() throws IOException {
         if (files.isEmpty()) {
-            throw new IllegalStateException("No current 7z entry");
+            throw new ArchiveException("No current 7z entry");
         }
 
         // doesn't need to be closed, just wraps the instance field channel
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java
index 1c84671bc..c3b6d02dd 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java
@@ -22,6 +22,7 @@
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
+import org.apache.commons.compress.archivers.ArchiveException;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -30,7 +31,7 @@
 class SevenZArchiveEntryTest {
 
     @Test
-    void testMethodConfigurationMattersInEquals() {
+    void testMethodConfigurationMattersInEquals() throws ArchiveException {
         final SevenZArchiveEntry z1 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z2 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z3 = new SevenZArchiveEntry();
@@ -44,7 +45,7 @@ void testMethodConfigurationMattersInEquals() {
     }
 
     @Test
-    void testMethodOrderMattersInEquals() {
+    void testMethodOrderMattersInEquals() throws ArchiveException {
         final SevenZArchiveEntry z1 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z2 = new SevenZArchiveEntry();
         z1.setContentMethods(new 
SevenZMethodConfiguration(SevenZMethod.LZMA2), new 
SevenZMethodConfiguration(SevenZMethod.DELTA_FILTER));
@@ -54,7 +55,7 @@ void testMethodOrderMattersInEquals() {
     }
 
     @Test
-    void testNoMethodsIsDifferentFromSomeMethods() {
+    void testNoMethodsIsDifferentFromSomeMethods() throws ArchiveException {
         final SevenZArchiveEntry z1 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z2 = new SevenZArchiveEntry();
         z2.setContentMethods(new SevenZMethodConfiguration(SevenZMethod.COPY));
@@ -63,7 +64,7 @@ void testNoMethodsIsDifferentFromSomeMethods() {
     }
 
     @Test
-    void testOneMethodsIsDifferentFromTwoMethods() {
+    void testOneMethodsIsDifferentFromTwoMethods() throws ArchiveException {
         final SevenZArchiveEntry z1 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z2 = new SevenZArchiveEntry();
         z1.setContentMethods(new SevenZMethodConfiguration(SevenZMethod.COPY));
@@ -73,7 +74,7 @@ void testOneMethodsIsDifferentFromTwoMethods() {
     }
 
     @Test
-    void testSameMethodsYieldEqualEntries() {
+    void testSameMethodsYieldEqualEntries() throws ArchiveException {
         final SevenZArchiveEntry z1 = new SevenZArchiveEntry();
         final SevenZArchiveEntry z2 = new SevenZArchiveEntry();
         z1.setContentMethods(new 
SevenZMethodConfiguration(SevenZMethod.DELTA_FILTER), new 
SevenZMethodConfiguration(SevenZMethod.LZMA2));
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfigurationTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfigurationTest.java
index a382907b9..e4fc20206 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfigurationTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZMethodConfigurationTest.java
@@ -22,54 +22,56 @@
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
+import org.apache.commons.compress.archivers.ArchiveException;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.Test;
 import org.tukaani.xz.LZMA2Options;
 
 class SevenZMethodConfigurationTest {
 
     @Test
-    void testShouldAllowLZMA2OptionsForLZMA() {
+    void testShouldAllowLZMA2OptionsForLZMA() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.LZMA, new 
LZMA2Options()).getOptions());
     }
 
     @Test
-    void testShouldAllowLZMA2OptionsForLZMA2() {
+    void testShouldAllowLZMA2OptionsForLZMA2() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.LZMA2, new 
LZMA2Options()).getOptions());
     }
 
     @Test
-    void testShouldAllowNullOptions() {
+    void testShouldAllowNullOptions() throws ArchiveException {
         assertNull(new SevenZMethodConfiguration(SevenZMethod.LZMA2, 
null).getOptions());
     }
 
     @Test
-    void testShouldAllowNumberForBzip2() {
+    void testShouldAllowNumberForBzip2() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.BZIP2, 
42).getOptions());
     }
 
     @Test
-    void testShouldAllowNumberForDeflate() {
+    void testShouldAllowNumberForDeflate() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.DEFLATE, 
42).getOptions());
     }
 
     @Test
-    void testShouldAllowNumberForLZMA() {
+    void testShouldAllowNumberForLZMA() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.LZMA, 
42).getOptions());
     }
 
     @Test
-    void testShouldAllowNumberForLZMA2() {
+    void testShouldAllowNumberForLZMA2() throws ArchiveException {
         assertNotNull(new SevenZMethodConfiguration(SevenZMethod.LZMA2, 
42).getOptions());
     }
 
     @Test
     void testShouldNotAllowStringOptionsForLZMA() {
-        assertThrows(IllegalArgumentException.class, () -> new 
SevenZMethodConfiguration(SevenZMethod.LZMA, ""));
+        assertThrows(ArchiveException.class, () -> new 
SevenZMethodConfiguration(SevenZMethod.LZMA, StringUtils.EMPTY));
     }
 
     @Test
     void testShouldNotAllowStringOptionsForLZMA2() {
-        assertThrows(IllegalArgumentException.class, () -> new 
SevenZMethodConfiguration(SevenZMethod.LZMA2, ""));
+        assertThrows(ArchiveException.class, () -> new 
SevenZMethodConfiguration(SevenZMethod.LZMA2, StringUtils.EMPTY));
     }
 
 }

Reply via email to