diff -r 789932355683 app/helpers/application_helper.rb
--- a/app/helpers/application_helper.rb Wed Jan 16 07:20:49 2019 +0000
+++ b/app/helpers/application_helper.rb Wed Jan 16 15:40:26 2019 +0300
@@ -724,7 +724,7 @@
attachments += obj.attachments if obj.respond_to?(:attachments)
if attachments.present?
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
- filename, ext, alt, alttext = $1.downcase, $2, $3, $4
+ filename, ext, alt, alttext = $1, $2, $3, $4
# search for the picture in attachments
if found = Attachment.latest_attach(attachments, CGI.unescape(filename))
image_url = download_named_attachment_url(found, found.filename, :only_path => only_path)
diff -r 789932355683 test/fixtures/attachments.yml
--- a/test/fixtures/attachments.yml Wed Jan 16 07:20:49 2019 +0000
+++ b/test/fixtures/attachments.yml Wed Jan 16 15:40:26 2019 +0300
@@ -268,3 +268,17 @@
filename: root_attachment.txt
filesize: 54
author_id: 2
+attachments_021:
+ content_type: image/png
+ downloads: 0
+ created_on: 2011-02-23 16:14:50 +09:00
+ disk_filename: 101223161450_testfile_2.png
+ disk_directory: "2010/12"
+ container_id: 14
+ digest: 6bc2963e8d7ea0d3e68d12d1fba3d6ca
+ id: 21
+ container_type: Issue
+ description: ""
+ filename: TestТест.png
+ filesize: 3582
+ author_id: 2
diff -r 789932355683 test/unit/attachment_test.rb
--- a/test/unit/attachment_test.rb Wed Jan 16 07:20:49 2019 +0000
+++ b/test/unit/attachment_test.rb Wed Jan 16 15:40:26 2019 +0300
@@ -410,6 +410,30 @@
set_tmp_attachments_directory
end
+ def test_latest_should_get_with_unicode_downcase
+ set_fixtures_attachments_directory
+
+ # first unicode letter (\xd0\xa2) is uppercase
+ string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
+ assert_equal true, string.valid_encoding?
+
+ a1 = Attachment.find(21)
+ assert_equal string, a1.filename
+
+ # ensure that string#casecmp fails to compare unicode strings case-sensitive
+ assert_not_equal 0, string.casecmp(string.downcase)
+
+ # search with exact string succeeds
+ la1 = Attachment.latest_attach([a1], string)
+ assert_not_nil la1
+
+ # using downcase should fail because of casecmp
+ la2 = Attachment.latest_attach([a1], string.downcase)
+ assert_nil la2
+
+ set_tmp_attachments_directory
+ end
+
def test_latest_attach_should_not_error_with_string_with_invalid_encoding
string = "width:50\xFE-Image.jpg".force_encoding('UTF-8')
assert_equal false, string.valid_encoding?
diff -r 789932355683 test/unit/helpers/application_helper_test.rb
--- a/test/unit/helpers/application_helper_test.rb Wed Jan 16 07:20:49 2019 +0000
+++ b/test/unit/helpers/application_helper_test.rb Wed Jan 16 15:40:26 2019 +0300
@@ -160,6 +160,16 @@
end
end
+ def test_attached_images_with_textile_and_uppercase_non_ascii_filename
+ # first unicode letter (\xd0\xa2) is uppercase
+ string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
+ attachment = Attachment.generate!(:filename => string)
+ with_settings :text_formatting => 'textile' do
+ assert_include %(),
+ textilizable("!" + string + "!)", :attachments => [attachment])
+ end
+ end
+
def test_attached_images_with_markdown_and_non_ascii_filename
skip unless Object.const_defined?(:Redcarpet)
@@ -170,6 +180,18 @@
end
end
+ def test_attached_images_with_markdown_and_uppercase_non_ascii_filename
+ skip unless Object.const_defined?(:Redcarpet)
+
+ # first unicode letter (\xd0\xa2) is uppercase
+ string = "Test\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82.png".force_encoding("UTF-8")
+ attachment = Attachment.generate!(:filename => string)
+ with_settings :text_formatting => 'markdown' do
+ assert_include %(
),
+ textilizable("![](" + string + ")", :attachments => [attachment])
+ end
+ end
+
def test_attached_images_with_hires_naming
attachment = Attachment.generate!(:filename => 'image@2x.png')
assert_equal %(