Browse Source

Validate attachment filenames on every change (#34367).

Patch by Holger Just.


git-svn-id: http://svn.redmine.org/redmine/trunk@20946 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/5.0.0
Go MAEDA 3 years ago
parent
commit
e41cf61de8

+ 5
- 6
app/models/attachment.rb View File

validates_length_of :filename, :maximum => 255 validates_length_of :filename, :maximum => 255
validates_length_of :disk_filename, :maximum => 255 validates_length_of :disk_filename, :maximum => 255
validates_length_of :description, :maximum => 255 validates_length_of :description, :maximum => 255
validate :validate_max_file_size, :validate_file_extension
validate :validate_max_file_size
validate :validate_file_extension, :if => :filename_changed?


acts_as_event( acts_as_event(
:title => :filename, :title => :filename,
end end


def validate_file_extension def validate_file_extension
if @temp_file
extension = File.extname(filename)
unless self.class.valid_extension?(extension)
errors.add(:base, l(:error_attachment_extension_not_allowed, :extension => extension))
end
extension = File.extname(filename)
unless self.class.valid_extension?(extension)
errors.add(:base, l(:error_attachment_extension_not_allowed, :extension => extension))
end end
end end



+ 1
- 1
lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb View File

end end
next unless a next unless a
a.description = attachment['description'].to_s.strip a.description = attachment['description'].to_s.strip
if a.new_record?
if a.new_record? || a.invalid?
unsaved_attachments << a unsaved_attachments << a
else else
saved_attachments << a saved_attachments << a

+ 13
- 0
test/unit/attachment_test.rb View File

end end
end end


def test_extension_update_should_be_validated_against_denied_extensions
with_settings :attachment_extensions_denied => "txt, png" do
a = Attachment.new(:container => Issue.find(1),
:file => mock_file_with_options(:original_filename => "test.jpeg"),
:author => User.find(1))
assert_save a

b = Attachment.find(a.id)
b.filename = "test.png"
assert !b.save
end
end

def test_valid_extension_should_be_case_insensitive def test_valid_extension_should_be_case_insensitive
with_settings :attachment_extensions_allowed => "txt, Png" do with_settings :attachment_extensions_allowed => "txt, Png" do
assert Attachment.valid_extension?(".pnG") assert Attachment.valid_extension?(".pnG")

Loading…
Cancel
Save