]> source.dussan.org Git - poi.git/commitdiff
[bug-65772] stop using deleteOnExit in DefaultTempFileCreationStrategy
authorPJ Fanning <fanningpj@apache.org>
Tue, 28 Dec 2021 12:12:01 +0000 (12:12 +0000)
committerPJ Fanning <fanningpj@apache.org>
Tue, 28 Dec 2021 12:12:01 +0000 (12:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896473 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/ooxml/util/PackageHelper.java
poi/src/main/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java
poi/src/main/java/org/apache/poi/util/DefaultTempFileCreationStrategy.java

index bc5642a9e66b9bd8fcdc7f9dc7e618b1815b6571..3463f255cf74f0ecfb64d5d665de12323ecd76ec 100644 (file)
@@ -36,6 +36,7 @@ import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.Removal;
 
 /**
  * Provides handy methods to work with OOXML packages
@@ -71,7 +72,10 @@ public final class PackageHelper {
      * @param   pkg   the package to clone
      * @param   file  the destination file
      * @return  the cloned package
+     * @deprecated this method is not used internally and creates temp files that are not well handled
      */
+    @Deprecated
+    @Removal(version = "6.0.0")
     public static OPCPackage clone(OPCPackage pkg, File file) throws OpenXML4JException, IOException {
 
         String path = file.getAbsolutePath();
index ffdec5ab5d210d75e0de927908ff712e4f58a143..7f174b2381e6dc21340cbae34df935572dafcb75 100644 (file)
@@ -71,7 +71,6 @@ public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
         this.plainByteFlags = new SparseBitSet(cs);
         this.chunkBits = Integer.bitCount(cs-1);
         this.fileOut = TempFile.createTempFile("encrypted_package", "crypt");
-        this.fileOut.deleteOnExit();
         this.out = new FileOutputStream(fileOut);
         this.dir = dir;
         this.cipher = initCipherForBlock(null, 0, false);
@@ -266,6 +265,10 @@ public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
             }
         } catch (GeneralSecurityException e) {
             throw new IOException(e);
+        } finally {
+            if (fileOut != null) {
+                fileOut.delete();
+            }
         }
     }
 
index f2e51d48ab8326eb74cc43105f02d2d8628ca47f..bbfb03e9abf9ecc54882c611bcc637a336849845 100644 (file)
@@ -26,7 +26,7 @@ import java.io.IOException;
  * Default implementation of the {@link TempFileCreationStrategy} used by {@link TempFile}:
  * Files are collected into one directory and by default are deleted on exit from the VM.
  * Files may be manually deleted by user prior to JVM exit.
- * Files can be kept by defining the system property {@link #KEEP_FILES}.
+ * Files can be kept by defining the system property {@link #DELETE_FILES_ON_EXIT}.
  *
  * Each file is registered for deletion with the JVM and the temporary directory is not deleted
  * after the JVM exits. Files that are created in the poifiles directory outside
@@ -37,8 +37,8 @@ import java.io.IOException;
 public class DefaultTempFileCreationStrategy implements TempFileCreationStrategy {
     public static final String POIFILES = "poifiles";
 
-    /** To keep files after JVM exit, set the <code>-Dpoi.keep.tmp.files</code> JVM property */
-    public static final String KEEP_FILES = "poi.keep.tmp.files";
+    /** To use files.deleteOnExit after clean JVM exit, set the <code>-Dpoi.delete.tmp.files.on.exit</code> JVM property */
+    public static final String DELETE_FILES_ON_EXIT = "poi.delete.tmp.files.on.exit";
 
     /** The directory where the temporary files will be created (<code>null</code> to use the default directory). */
     private File dir;
@@ -105,8 +105,8 @@ public class DefaultTempFileCreationStrategy implements TempFileCreationStrategy
         // Generate a unique new filename
         File newFile = File.createTempFile(prefix, suffix, dir);
 
-        // Set the delete on exit flag, unless explicitly disabled
-        if (System.getProperty(KEEP_FILES) == null) {
+        // Set the delete on exit flag, but only when explicitly disabled
+        if (System.getProperty(DELETE_FILES_ON_EXIT) != null) {
             newFile.deleteOnExit();
         }
 
@@ -126,10 +126,8 @@ public class DefaultTempFileCreationStrategy implements TempFileCreationStrategy
         File newDirectory = new File(dir, prefix + Long.toString(n));
         createTempDirectory(newDirectory);
 
-        // Set the delete on exit flag, unless explicitly disabled
-        if (System.getProperty(KEEP_FILES) == null) {
-            newDirectory.deleteOnExit();
-        }
+        //this method appears to be only used in tests, so it is probably ok to use deleteOnExit
+        newDirectory.deleteOnExit();
 
         // All done
         return newDirectory;