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(

Reply via email to