From 7337343f569599c4f1250b22312e093685027568 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Sat, 20 Mar 2021 23:29:21 +0000 Subject: [PATCH] Case-insensitive matching fails for Unicode filenames when referring to attachments in text formatting (#27780). Patch by Go MAEDA. git-svn-id: http://svn.redmine.org/redmine/trunk@20835 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/attachment.rb | 4 +++- test/unit/attachment_test.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 3ffb1b51d..ebac3f2a0 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -368,8 +368,10 @@ class Attachment < ActiveRecord::Base end def self.latest_attach(attachments, filename) + return unless filename.valid_encoding? + attachments.sort_by(&:created_on).reverse.detect do |att| - filename.casecmp(att.filename) == 0 + filename.casecmp?(att.filename) end end diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index 868e83f48..21b5ab431 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -473,6 +473,19 @@ class AttachmentTest < ActiveSupport::TestCase Attachment.latest_attach(Attachment.limit(2).to_a, string) end + def test_latest_attach_should_support_unicode_case_folding + a_capital = Attachment.create!( + :author => User.find(1), + :file => mock_file(:filename => 'Ā.TXT') + ) + a_small = Attachment.create!( + :author => User.find(1), + :file => mock_file(:filename => 'ā.txt') + ) + + assert_equal(a_small, Attachment.latest_attach([a_capital, a_small], 'Ā.TXT')) + end + def test_thumbnailable_should_be_true_for_images skip unless convert_installed? assert_equal true, Attachment.new(:filename => 'test.jpg').thumbnailable? -- 2.39.5