Sheung Chi Chan created CODEC-319:
-------------------------------------

             Summary: DeferredFileOutputStream does not delete the temporary 
file created
                 Key: CODEC-319
                 URL: https://issues.apache.org/jira/browse/CODEC-319
             Project: Commons Codec
          Issue Type: Improvement
            Reporter: Sheung Chi Chan


The {{DeferredFileOutputStream}} class is a custom {{OutputStream}} object from 
the Apache Commons IO library which will not write data directly to disk. It 
will only write data to disk when the configured threshold is reached. During 
the initialisation of the {{DeferredFileOutputStream}} object through its 
builder class, the user could specify a custom file path or provide a prefix 
and suffix for temporary file creation. The provided custom file path or the 
temporary file created will be used for storing the data on disk when the 
configured threshold is reached. When using the prefix/suffix approach, the 
temporary file is created using the {{java.nio.file.Files::createTempFile}} 
method only when the threshold is reached. The temporary file created by the 
{{java.nio.file.Files::createTempFile}} method will not be removed 
automatically, thus when the stream is closed after the threshold is reached 
and the prefix/suffix approach is used, there will be an unexpected file stored 
in the disk persistently. Although it should not be accessible by other users 
since the {{java.nio.file.Files::createTempFile}} method creates a temporary 
file only for the current user to access, it still poses a problem when the 
{{DeferredFileOutputStream}} object is being flooded with a large amount of 
data. This could use up the disk space and cause possible out-of-disk space 
problems.

Although the flooding of data could also be a problem when using the 
user-provided file, since it is the user who creates the file, thus the user is 
responsible to remove or clean up that file when it is no longer used. But if 
the prefix/suffix approach is used, the user does not have control of the file 
and when the {{DeferredFileOutputStream}} is closed, it is assumed that the 
temporary file created during the processing of {{DeferredFileOutputStream}} is 
removed or cleaned up. It is a general practice for Java OutputStream to clean 
up its process and temporary objects when its close method is called. Thus the 
missing that could result in unexpectedly large files staying in the disk 
unawared.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to