You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2026/08/11 13:58:49 UTC
(commons-compress) 04/05: [Deflate64] Deflate64Decoder now throws ArchiveException instead of IllegalArgumetException/IllegalStateException.
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 07e5d650c13396582bfa6a7eeb913887126b486d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Aug 11 09:34:19 2026 -0400
[Deflate64] Deflate64Decoder now throws ArchiveException instead of
IllegalArgumetException/IllegalStateException.
---
src/changes/changes.xml | 1 +
.../compress/compressors/deflate64/Deflate64Decoder.java | 14 +++++++-------
.../compressors/deflate64/Deflate64DecoderTest.java | 2 +-
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b2a08c7e0..56615cfb3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -150,6 +150,7 @@ The <action> type attribute can be add,update,fix,remove.
<!-- FIX deflate64 -->
<action type="fix" dev="ggregory" due-to="KALI 834X, Gary Gregory">[Deflate64] Reject invalid literal/length and distance codes in Deflate64 decoder (#785).</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory">[Deflate64] Deflate64CompressorInputStream now throws ArchiveException instead of IllegalArgumetException/IllegalStateException.</action>
+ <action type="fix" dev="ggregory" due-to="Gary Gregory">[Deflate64] Deflate64Decoder now throws ArchiveException instead of IllegalArgumetException/IllegalStateException.</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 IllegalArgumetException/IllegalStateException.</action>
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64Decoder.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64Decoder.java
index ee64475b3..1545c945d 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64Decoder.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64Decoder.java
@@ -87,13 +87,13 @@ private int incCounter(final int counter) {
return newCounter;
}
- void recordToBuffer(final int distance, final int length, final byte[] buff) {
+ void recordToBuffer(final int distance, final int length, final byte[] buff) throws CompressorException {
if (distance > memory.length) {
- throw new IllegalStateException("Illegal distance parameter: " + distance);
+ throw new CompressorException("Illegal distance parameter: " + distance);
}
final int start = wHead - distance & mask;
if (!wrappedAround && start >= wHead) {
- throw new IllegalStateException("Attempt to read beyond memory: dist=" + distance);
+ throw new CompressorException("Attempt to read beyond memory: dist=" + distance);
}
for (int i = 0, pos = start; i < length; i++, pos = incCounter(pos)) {
buff[i] = add(memory[pos]);
@@ -210,11 +210,11 @@ boolean hasData() {
}
@Override
- int read(final byte[] b, final int off, final int len) {
+ int read(final byte[] b, final int off, final int len) throws CompressorException {
if (len == 0) {
return 0;
}
- throw new IllegalStateException("Cannot read in this state");
+ throw new CompressorException("Cannot read in this state");
}
@Override
@@ -451,7 +451,7 @@ public int decode(final byte[] b, final int off, final int len) throws IOExcepti
state = new HuffmanCodes(DYNAMIC_CODES, tables[0], tables[1]);
break;
default:
- throw new IllegalStateException("Unsupported compression: " + mode);
+ throw new CompressorException("Unsupported compression: " + mode);
}
} else {
final int r = state.read(b, off, len);
@@ -492,7 +492,7 @@ private void switchToUncompressedState() throws IOException {
final long bNLen = readBits(16);
if (((bLen ^ 0xFFFF) & 0xFFFF) != bNLen) {
// noinspection DuplicateStringLiteralInspection
- throw new IllegalStateException("Illegal LEN / NLEN values");
+ throw new CompressorException("Illegal LEN / NLEN values");
}
state = new UncompressedState(bLen);
}
diff --git a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64DecoderTest.java b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64DecoderTest.java
index f171fecf5..e4c661dcb 100644
--- a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64DecoderTest.java
+++ b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64DecoderTest.java
@@ -255,7 +255,7 @@ void testDecodeUncompressedBlockWithInvalidLenNLenValue() throws Exception {
'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' };
try (Deflate64Decoder decoder = new Deflate64Decoder(new ByteArrayInputStream(data))) {
final byte[] result = new byte[100];
- final IllegalStateException e = assertThrows(IllegalStateException.class, () -> {
+ final CompressorException e = assertThrows(CompressorException.class, () -> {
final int len = decoder.decode(result);
fail("Should have failed but returned " + len + " entries: " + Arrays.toString(Arrays.copyOf(result, len)));
});