super(access);
try (ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in)) {
this.zipArchive = new ZipInputStreamZipEntrySource(zis);
- } catch (final IOException | RuntimeException e) {
- IOUtils.closeQuietly(in);
- throw e;
}
}
+++ /dev/null
-/* ====================================================================
- 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() {}
-}
verifyZipHeader(checkedStream);
// Open as a proper zip stream
- return new ZipArchiveThresholdInputStream(new ZipArchiveInputStream(new NoCloseInputStream(checkedStream)));
+ return new ZipArchiveThresholdInputStream(new ZipArchiveInputStream(checkedStream));
}
/**
}
@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");
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++;
}