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 6cafa65b6 Fix NullPointerException at (#757)
6cafa65b6 is described below
commit 6cafa65b60f343da999a66f1b480e3d6921270f1
Author: Gary Gregory <[email protected]>
AuthorDate: Tue Jan 13 08:03:01 2026 -0500
Fix NullPointerException at (#757)
BZip2CompressorOutputStream.writeRun(BZip2CompressorOutputStream.java:1209)
java.lang.NullPointerException
at
org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream.writeRun(BZip2CompressorOutputStream.java:1209)
at
org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream.finish(BZip2CompressorOutputStream.java:544)
at
org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream.close(BZip2CompressorOutputStream.java:480)
at
org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStreamTest.testFinishClose(BZip2CompressorInputStreamTest.java:134)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at java.util.ArrayList.forEach(ArrayList.java:1259)
---
.../bzip2/BZip2CompressorOutputStream.java | 3 ++-
.../bzip2/BZip2CompressorInputStreamTest.java | 26 ++++++++++++++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git
a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
index 72cb8e205..5416fba02 100644
---
a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
+++
b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
@@ -540,7 +540,7 @@ private void endCompression() throws IOException {
@Override
public void finish() throws IOException {
- if (!isClosed()) {
+ if (!isClosed() && !isFinished()) {
try {
if (this.runLength > 0) {
writeRun();
@@ -551,6 +551,7 @@ public void finish() throws IOException {
} finally {
this.blockSorter = null;
this.data = null;
+ super.finish();
}
}
}
diff --git
a/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
b/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
index 2c84fe18e..d10e0fe15 100644
---
a/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
+++
b/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
@@ -119,6 +119,32 @@ void testCreateHuffmanDecodingTablesWithLargeAlphaSize() {
assertEquals(data.minLens[0], 1, "Minimum code length should be 1");
}
+ @Test
+ void testFinishClose() throws Exception {
+ // Create a big random piece of data
+ final byte[] rawData = new byte[1048576];
+ for (int i = 0; i < rawData.length; ++i) {
+ rawData[i] = (byte) Math.floor(Math.random() * 256);
+ }
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try (BZip2CompressorOutputStream bzipOut = new
BZip2CompressorOutputStream(baos)) {
+ bzipOut.write(rawData);
+ bzipOut.flush();
+ bzipOut.finish();
+ bzipOut.close();
+ assertTrue(bzipOut.isClosed());
+ baos.flush();
+ }
+ baos.reset();
+ try (BZip2CompressorOutputStream bzipOut = new
BZip2CompressorOutputStream(baos)) {
+ bzipOut.write(rawData);
+ bzipOut.finish();
+ bzipOut.close();
+ assertTrue(bzipOut.isClosed());
+ baos.flush();
+ }
+ }
+
@Test
void testHbCreateDecodeTables() throws IOException {
assertThrows(CompressorException.class, () -> new
BZip2CompressorInputStream(