Defect #30441 » attachments-unicode-case.diff
| app/helpers/application_helper.rb Wed Jan 16 07:20:49 2019 +0000 → app/helpers/application_helper.rb Wed Jan 16 15:40:26 2019 +0300 | ||
|---|---|---|
| 724 | 724 |
attachments += obj.attachments if obj.respond_to?(:attachments) |
| 725 | 725 |
if attachments.present? |
| 726 | 726 |
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| |
| 727 |
filename, ext, alt, alttext = $1.downcase, $2, $3, $4
|
|
| 727 |
filename, ext, alt, alttext = $1, $2, $3, $4 |
|
| 728 | 728 |
# search for the picture in attachments |
| 729 | 729 |
if found = Attachment.latest_attach(attachments, CGI.unescape(filename)) |
| 730 | 730 |
image_url = download_named_attachment_url(found, found.filename, :only_path => only_path) |
| test/fixtures/attachments.yml Wed Jan 16 07:20:49 2019 +0000 → test/fixtures/attachments.yml Wed Jan 16 15:40:26 2019 +0300 | ||
|---|---|---|
| 268 | 268 |
filename: root_attachment.txt |
| 269 | 269 |
filesize: 54 |
| 270 | 270 |
author_id: 2 |
| 271 |
attachments_021: |
|
| 272 |
content_type: image/png |
|
| 273 |
downloads: 0 |
|
| 274 |
created_on: 2011-02-23 16:14:50 +09:00 |
|
| 275 |
disk_filename: 101223161450_testfile_2.png |
|
| 276 |
disk_directory: "2010/12" |
|
| 277 |
container_id: 14 |
|
| 278 |
digest: 6bc2963e8d7ea0d3e68d12d1fba3d6ca |
|
| 279 |
id: 21 |
|
| 280 |
container_type: Issue |
|
| 281 |
description: "" |
|
| 282 |
filename: TestТест.png |
|
| 283 |
filesize: 3582 |
|
| 284 |
author_id: 2 |
|
| test/unit/attachment_test.rb Wed Jan 16 07:20:49 2019 +0000 → test/unit/attachment_test.rb Wed Jan 16 15:40:26 2019 +0300 | ||
|---|---|---|
| 410 | 410 |
set_tmp_attachments_directory |
| 411 | 411 |
end |
| 412 | 412 | |
| 413 |
def test_latest_should_get_with_unicode_downcase |
|
| 414 |
set_fixtures_attachments_directory |
|
| 415 | ||
| 416 |
# first unicode letter (\xd0\xa2) is uppercase |
|
| 417 |
string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
|
|
| 418 |
assert_equal true, string.valid_encoding? |
|
| 419 | ||
| 420 |
a1 = Attachment.find(21) |
|
| 421 |
assert_equal string, a1.filename |
|
| 422 | ||
| 423 |
# ensure that string#casecmp fails to compare unicode strings case-sensitive |
|
| 424 |
assert_not_equal 0, string.casecmp(string.downcase) |
|
| 425 | ||
| 426 |
# search with exact string succeeds |
|
| 427 |
la1 = Attachment.latest_attach([a1], string) |
|
| 428 |
assert_not_nil la1 |
|
| 429 | ||
| 430 |
# using downcase should fail because of casecmp |
|
| 431 |
la2 = Attachment.latest_attach([a1], string.downcase) |
|
| 432 |
assert_nil la2 |
|
| 433 | ||
| 434 |
set_tmp_attachments_directory |
|
| 435 |
end |
|
| 436 | ||
| 413 | 437 |
def test_latest_attach_should_not_error_with_string_with_invalid_encoding |
| 414 | 438 |
string = "width:50\xFE-Image.jpg".force_encoding('UTF-8')
|
| 415 | 439 |
assert_equal false, string.valid_encoding? |
| test/unit/helpers/application_helper_test.rb Wed Jan 16 07:20:49 2019 +0000 → test/unit/helpers/application_helper_test.rb Wed Jan 16 15:40:26 2019 +0300 | ||
|---|---|---|
| 160 | 160 |
end |
| 161 | 161 |
end |
| 162 | 162 | |
| 163 |
def test_attached_images_with_textile_and_uppercase_non_ascii_filename |
|
| 164 |
# first unicode letter (\xd0\xa2) is uppercase |
|
| 165 |
string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
|
|
| 166 |
attachment = Attachment.generate!(:filename => string) |
|
| 167 |
with_settings :text_formatting => 'textile' do |
|
| 168 |
assert_include %(<img src="/attachments/download/#{attachment.id}/Test%D0%A2%D0%B5%D1%81%D1%82.png" alt="" />),
|
|
| 169 |
textilizable("!" + string + "!)", :attachments => [attachment])
|
|
| 170 |
end |
|
| 171 |
end |
|
| 172 | ||
| 163 | 173 |
def test_attached_images_with_markdown_and_non_ascii_filename |
| 164 | 174 |
skip unless Object.const_defined?(:Redcarpet) |
| 165 | 175 | |
| ... | ... | |
| 170 | 180 |
end |
| 171 | 181 |
end |
| 172 | 182 | |
| 183 |
def test_attached_images_with_markdown_and_uppercase_non_ascii_filename |
|
| 184 |
skip unless Object.const_defined?(:Redcarpet) |
|
| 185 | ||
| 186 |
# first unicode letter (\xd0\xa2) is uppercase |
|
| 187 |
string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
|
|
| 188 |
attachment = Attachment.generate!(:filename => string) |
|
| 189 |
with_settings :text_formatting => 'markdown' do |
|
| 190 |
assert_include %(<img src="/attachments/download/#{attachment.id}/Test%D0%A2%D0%B5%D1%81%D1%82.png" alt="" />),
|
|
| 191 |
textilizable("", :attachments => [attachment])
|
|
| 192 |
end |
|
| 193 |
end |
|
| 194 | ||
| 173 | 195 |
def test_attached_images_with_hires_naming |
| 174 | 196 |
attachment = Attachment.generate!(:filename => 'image@2x.png') |
| 175 | 197 |
assert_equal %(<p><img src="/attachments/download/#{attachment.id}/image@2x.png" srcset="/attachments/download/#{attachment.id}/image@2x.png 2x" alt="" /></p>),
|