]> source.dussan.org Git - poi.git/commitdiff
[bug-67579] revert changes - POI will again close the InputStream
authorPJ Fanning <fanningpj@apache.org>
Thu, 26 Oct 2023 17:37:46 +0000 (17:37 +0000)
committerPJ Fanning <fanningpj@apache.org>
Thu, 26 Oct 2023 17:37:46 +0000 (17:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1913356 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java
poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/NoCloseInputStream.java [deleted file]
poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/ZipHelper.java
poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

index cf0202e3ad6fa1570fe6363861c63db8162f2a08..2eb59e32f9bac24a47c2232d56cb6f4d71ccbfb3 100644 (file)
@@ -131,9 +131,6 @@ public final class ZipPackage extends OPCPackage {
         super(access);
         try (ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in)) {
             this.zipArchive = new ZipInputStreamZipEntrySource(zis);
-        } catch (final IOException | RuntimeException e) {
-            IOUtils.closeQuietly(in);
-            throw e;
         }
     }
 
diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/NoCloseInputStream.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/NoCloseInputStream.java
deleted file mode 100644 (file)
index b27685a..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-
-package org.apache.poi.openxml4j.opc.internal;
-
-import org.apache.poi.util.Internal;
-
-import java.io.FilterInputStream;
-import java.io.InputStream;
-
-@Internal
-final class NoCloseInputStream extends FilterInputStream {
-    NoCloseInputStream(InputStream stream) {
-        super(stream);
-    }
-
-    @Override
-    public void close() {}
-}
index 7622b28b5ca3a6ddf1dfc1e21a45917472948899..26f3cffae1c5cc710711f3a71df4b2cd361a1214 100644 (file)
@@ -176,7 +176,7 @@ public final class ZipHelper {
         verifyZipHeader(checkedStream);
         
         // Open as a proper zip stream
-        return new ZipArchiveThresholdInputStream(new ZipArchiveInputStream(new NoCloseInputStream(checkedStream)));
+        return new ZipArchiveThresholdInputStream(new ZipArchiveInputStream(checkedStream));
     }
 
     /**
index 2641862e74dd97e1929de465fec198e651e62d96..f5eb9f18aac6faeefbd72c0228f41316cefa49e1 100644 (file)
@@ -1449,17 +1449,26 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
     }
 
     @Test
-    void testWorkbookCloseDoesNotCloseInputStream() throws Exception {
+    void testWorkbookCloseClosesInputStream() throws Exception {
         try (WrappedStream stream = new WrappedStream(
                 HSSFTestDataSamples.openSampleFileStream("github-321.xlsx"))) {
             try (XSSFWorkbook wb = new XSSFWorkbook(stream)) {
                 XSSFSheet xssfSheet = wb.getSheetAt(0);
                 assertNotNull(xssfSheet);
             }
-            assertFalse(stream.isClosed(), "stream should noy be closed by XSSFWorkbook");
+            assertTrue(stream.isClosed(), "stream should be closed by XSSFWorkbook");
         }
     }
 
+    static class NoCloseInputStream extends FilterInputStream {
+        NoCloseInputStream(InputStream stream) {
+            super(stream);
+        }
+
+        @Override
+        public void close() {}
+    }
+
     @Test
     void readFromZipStream() throws IOException {
         File tempFile = TempFile.createTempFile("poitest", ".zip");
@@ -1485,7 +1494,9 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
             try (ZipArchiveInputStream zis = new ZipArchiveInputStream(Files.newInputStream(tempFile.toPath()))) {
                 ZipArchiveEntry entry;
                 while ((entry = zis.getNextZipEntry()) != null) {
-                    XSSFWorkbook wb = new XSSFWorkbook(zis);
+                    // NoCloseInputStream is needed to stop XSSFWorkbook closing the underlying InputStream
+                    // this might not sound great but POI has worked like this for years and we can't just change it
+                    XSSFWorkbook wb = new XSSFWorkbook(new NoCloseInputStream(zis));
                     assertNotNull(wb);
                     count++;
                 }