Defect #34367 ยป 0001-Validate-attachment-filenames-on-every-change.patch
app/models/attachment.rb | ||
---|---|---|
30 | 30 |
validates_length_of :filename, :maximum => 255 |
31 | 31 |
validates_length_of :disk_filename, :maximum => 255 |
32 | 32 |
validates_length_of :description, :maximum => 255 |
33 |
validate :validate_max_file_size, :validate_file_extension |
|
33 |
validate :validate_max_file_size |
|
34 |
validate :validate_file_extension, :if => :filename_changed? |
|
34 | 35 | |
35 | 36 |
acts_as_event( |
36 | 37 |
:title => :filename, |
... | ... | |
91 | 92 |
end |
92 | 93 | |
93 | 94 |
def validate_file_extension |
94 |
if @temp_file |
|
95 |
extension = File.extname(filename) |
|
96 |
unless self.class.valid_extension?(extension) |
|
97 |
errors.add(:base, l(:error_attachment_extension_not_allowed, :extension => extension)) |
|
98 |
end |
|
95 |
extension = File.extname(filename) |
|
96 |
unless self.class.valid_extension?(extension) |
|
97 |
errors.add(:base, l(:error_attachment_extension_not_allowed, :extension => extension)) |
|
99 | 98 |
end |
100 | 99 |
end |
101 | 100 |
lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb | ||
---|---|---|
107 | 107 |
end |
108 | 108 |
next unless a |
109 | 109 |
a.description = attachment['description'].to_s.strip |
110 |
if a.new_record? |
|
110 |
if a.new_record? || a.invalid?
|
|
111 | 111 |
unsaved_attachments << a |
112 | 112 |
else |
113 | 113 |
saved_attachments << a |
test/unit/attachment_test.rb | ||
---|---|---|
152 | 152 |
end |
153 | 153 |
end |
154 | 154 | |
155 |
def test_extension_update_should_be_validated_against_denied_extensions |
|
156 |
with_settings :attachment_extensions_denied => "txt, png" do |
|
157 |
a = Attachment.new(:container => Issue.find(1), |
|
158 |
:file => mock_file_with_options(:original_filename => "test.jpeg"), |
|
159 |
:author => User.find(1)) |
|
160 |
assert_save a |
|
161 | ||
162 |
b = Attachment.find(a.id) |
|
163 |
b.filename = "test.png" |
|
164 |
assert !b.save |
|
165 |
end |
|
166 |
end |
|
167 | ||
155 | 168 |
def test_valid_extension_should_be_case_insensitive |
156 | 169 |
with_settings :attachment_extensions_allowed => "txt, Png" do |
157 | 170 |
assert Attachment.valid_extension?(".pnG") |