]> source.dussan.org Git - poi.git/commitdiff
try harder to close zipArchive in ZipPackage (edge cases)
authorPJ Fanning <fanningpj@apache.org>
Sun, 15 Oct 2023 21:06:01 +0000 (21:06 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sun, 15 Oct 2023 21:06:01 +0000 (21:06 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1912986 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java

index dce58c71690a2b374916859a5ffd63cc43788500..cf0202e3ad6fa1570fe6363861c63db8162f2a08 100644 (file)
@@ -458,22 +458,35 @@ public final class ZipPackage extends OPCPackage {
     @Override
     protected void closeImpl() throws IOException {
         // Flush the package
-        flush();
+        try {
+            flush();
+        } catch (RuntimeException|Error e) {
+            IOUtils.closeQuietly(zipArchive);
+            throw e;
+        }
 
         if (this.originalPackagePath == null || this.originalPackagePath.isEmpty()) {
+            IOUtils.closeQuietly(zipArchive);
             return;
         }
 
         // Save the content
         File targetFile = new File(this.originalPackagePath);
         if (!targetFile.exists()) {
+            IOUtils.closeQuietly(zipArchive);
             throw new InvalidOperationException(
                 "Can't close a package not previously open with the open() method !");
         }
 
         // Case of a package previously open
-        String tempFileName = generateTempFileName(FileHelper.getDirectory(targetFile));
-        File tempFile = TempFile.createTempFile(tempFileName, ".tmp");
+        File tempFile;
+        try {
+            String tempFileName = generateTempFileName(FileHelper.getDirectory(targetFile));
+            tempFile = TempFile.createTempFile(tempFileName, ".tmp");
+        } catch (IOException|RuntimeException|Error e) {
+            IOUtils.closeQuietly(zipArchive);
+            throw e;
+        }
 
         // Save the final package to a temporary file
         boolean success = false;
@@ -482,7 +495,7 @@ public final class ZipPackage extends OPCPackage {
             success = true;
         } finally {
             // Close the current zip file, so we can overwrite it on all platforms
-            IOUtils.closeQuietly(this.zipArchive);
+            IOUtils.closeQuietly(zipArchive);
             try {
                 // Copy the new file over the old one if save() succeed
                 if(success) {