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


The following commit(s) were added to refs/heads/master by this push:
     new d238c08a9 Fix NullPointerException when reading XZ entries in 
ZipArchiveInputStream (#774)
d238c08a9 is described below

commit d238c08a9b4ce3cc47c79a59b318f5a89d4c57d1
Author: Zach Warneke <[email protected]>
AuthorDate: Mon Jun 29 17:03:37 2026 -0700

    Fix NullPointerException when reading XZ entries in ZipArchiveInputStream 
(#774)
    
    * Fix NPE when reading XZ entries in ZipArchiveInputStream
    
    * Fix formatting in ZipArchiveInputStream changes from previous commit.
    
    * Update ZipArchiveInputStreamTest.java
    
    ---------
    
    Co-authored-by: Gary Gregory <[email protected]>
---
 .../compress/archivers/zip/ZipArchiveInputStream.java      |  4 ++++
 .../compress/archivers/zip/ZipArchiveInputStreamTest.java  | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index 8cc75880c..4ecfc3811 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -46,6 +46,7 @@
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import 
org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
 import 
org.apache.commons.compress.compressors.deflate64.Deflate64CompressorInputStream;
+import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
 import 
org.apache.commons.compress.compressors.zstandard.ZstdCompressorInputStream;
 import org.apache.commons.compress.utils.ArchiveUtils;
 import org.apache.commons.compress.utils.InputStreamStatistics;
@@ -929,6 +930,9 @@ public ZipArchiveEntry getNextZipEntry() throws IOException 
{
                 case ENHANCED_DEFLATED:
                     current.inputStream = new 
Deflate64CompressorInputStream(bis);
                     break;
+                case XZ:
+                    current.inputStream = new XZCompressorInputStream(bis);
+                    break;
                 case ZSTD:
                 case ZSTD_DEPRECATED:
                     current.inputStream = createZstdInputStream(bis);
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
index df91f36ce..f56f1ad88 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
@@ -771,6 +771,20 @@ void testUnzipBZip2CompressedEntry() throws Exception {
         }
     }
 
+    @Test
+    void testUnzipXZCompressedEntry() throws Exception {
+        try (ZipArchiveInputStream in = 
ZipArchiveInputStream.builder().setURI(getURI("org/apache/commons/compress/zip/test-method-xz.zip")).get())
 {
+            final ZipArchiveEntry ze = in.getNextZipEntry();
+            final byte[] buf = IOUtils.toByteArray(in);
+            final String text = new String(buf);
+            assertEquals("LICENSE.txt", ze.getName());
+            assertEquals(11357, text.length());
+            assertTrue(text.startsWith("                                 
Apache License"), text);
+            assertTrue(text.endsWith("   limitations under the License.\n"), 
text);
+            assertEquals(11357, text.length());
+        }
+    }
+
     /**
      * @see "https://issues.apache.org/jira/browse/COMPRESS-176";
      */

Reply via email to