Multiple zip files are filling the tmp folder #1017

This commit is contained in:
Karel Pičman 2019-07-02 10:18:41 +02:00
parent d854af8090
commit d6cdf8c25a
3 changed files with 9 additions and 21 deletions

View File

@ -366,16 +366,7 @@ class DmsfController < ApplicationController
raise DmsfAccessError unless User.current.allowed_to?(:email_documents, @project)
zip = Zip.new
zip_entries(zip, selected_folders, selected_files)
zipped_content = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_email_sent_documents.zip'))
File.open(zipped_content, 'wb') do |f|
File.open(zip.finish, 'rb') do |zip_file|
while (buffer = zip_file.read(8192))
f.write(buffer)
end
end
end
zipped_content = zip.finish
max_filesize = Setting.plugin_redmine_dmsf['dmsf_max_email_filesize'].to_f
if max_filesize > 0 && File.size(zipped_content) > max_filesize * 1048576

View File

@ -29,15 +29,15 @@ module RedmineDmsf
attr_reader :files
def initialize
@zip_path = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_zip.zip'))
@zip_file = ::Zip::OutputStream.new(@zip_path)
@temp_file = Tempfile.new(%w(dmsf_zip_ .zip), DmsfHelper.temp_dir)
@zip_file = ::Zip::OutputStream.open(@temp_file)
@files = []
@folders = []
end
def finish
@zip_file.close
@zip_path
@temp_file.path
end
def close

View File

@ -286,19 +286,16 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_entries_email
@role.add_permission! :view_dmsf_files
zip_file_path = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_email_sent_documents.zip'))
FileUtils.touch(zip_file_path)
assert File.exist?(zip_file_path)
get :entries_email, :params => {:id => @project, :email =>
zip_file = Tempfile.new('test', DmsfHelper::temp_dir)
get :entries_email, params: { id: @project, email:
{
:to => 'to@test.com', :from => 'from@test.com', :subject => 'subject', :body => 'body', :expired_at => '2015-01-01',
:folders => [], :files => [@file1.id], :zipped_content => zip_file_path
to: 'to@test.com', from: 'from@test.com', subject: 'subject', body: 'body', expired_at: '2015-01-01',
folders: [], files: [@file1.id], zipped_content: zip_file.path
}
}
assert_redirected_to dmsf_folder_path(id: @project)
assert !File.exist?(zip_file_path)
ensure
FileUtils.rm_rf(zip_file_path)
zip_file.unlink
end
def test_add_email_forbidden