@@ -177,11 +177,9 private | |||
|
177 | 177 | def sanitize_filename(value) |
|
178 | 178 | # get only the filename, not the whole path |
|
179 | 179 | just_filename = value.gsub(/^.*(\\|\/)/, '') |
|
180 | # NOTE: File.basename doesn't work right with Windows paths on Unix | |
|
181 | # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) | |
|
182 | 180 | |
|
183 |
# Finally, replace |
|
|
184 |
@filename = just_filename.gsub(/[ |
|
|
181 | # Finally, replace invalid characters with underscore | |
|
182 | @filename = just_filename.gsub(/[\/\?\%\*\:\|\"\'<>]+/, '_') | |
|
185 | 183 | end |
|
186 | 184 | |
|
187 | 185 | # Returns an ASCII or hashed filename |
@@ -22,6 +22,17 require File.expand_path('../../test_helper', __FILE__) | |||
|
22 | 22 | class AttachmentTest < ActiveSupport::TestCase |
|
23 | 23 | fixtures :users, :projects, :roles, :members, :member_roles, |
|
24 | 24 | :enabled_modules, :issues, :trackers, :attachments |
|
25 | ||
|
26 | class MockFile | |
|
27 | attr_reader :original_filename, :content_type, :content, :size | |
|
28 | ||
|
29 | def initialize(attributes) | |
|
30 | @original_filename = attributes[:original_filename] | |
|
31 | @content_type = attributes[:content_type] | |
|
32 | @content = attributes[:content] || "Content" | |
|
33 | @size = content.size | |
|
34 | end | |
|
35 | end | |
|
25 | 36 | |
|
26 | 37 | def setup |
|
27 | 38 | set_tmp_attachments_directory |
@@ -75,6 +86,16 class AttachmentTest < ActiveSupport::TestCase | |||
|
75 | 86 | :author => User.find(1)) |
|
76 | 87 | assert a1.disk_filename != a2.disk_filename |
|
77 | 88 | end |
|
89 | ||
|
90 | def test_filename_should_be_basenamed | |
|
91 | a = Attachment.new(:file => MockFile.new(:original_filename => "path/to/the/file")) | |
|
92 | assert_equal 'file', a.filename | |
|
93 | end | |
|
94 | ||
|
95 | def test_filename_should_be_sanitized | |
|
96 | a = Attachment.new(:file => MockFile.new(:original_filename => "valid:[] invalid:?%*|\"'<>chars")) | |
|
97 | assert_equal 'valid_[] invalid_chars', a.filename | |
|
98 | end | |
|
78 | 99 | |
|
79 | 100 | def test_diskfilename |
|
80 | 101 | assert Attachment.disk_filename("test_file.txt") =~ /^\d{12}_test_file.txt$/ |
General Comments 0
You need to be logged in to leave comments.
Login now