Defect #27780

Attachment sort doesn't work with Unicode

Added by Амир Мусин over 1 year ago. Updated 4 months ago.

Status:NewStart date:
Priority:NormalDue date:
Assignee:-% Done:

0%

Category:Attachments
Target version:Candidate for next major release
Resolution: Affected version:

Description

casecmp method doesn't work with Unicode symbol - https://bugs.ruby-lang.org/issues/14055
decision is to use casecmp? instead of casecmp - https://bugs.ruby-lang.org/issues/12786

attachment.rb.patch Magnifier (404 Bytes) Амир Мусин, 2017-12-11 17:47


Related issues

Related to Redmine - Patch #20369: Use String#casecmp for case insensitive comparison Closed
Related to Redmine - Feature #29914: Migrate to Rails 6 New
Related to Redmine - Defect #30441: Attachments with Unicode uppercase names are not shown in... Closed

History

#1 Updated by Toshi MARUYAMA over 1 year ago

  • Tracker changed from Patch to Defect
  • Subject changed from Attachment.rb patch to Attachment sort doesn't work with Unicode

#3 Updated by Go MAEDA over 1 year ago

Амир Мусин, thank you for reporting the problem and providing the patch.

But the patch needs some improvements because Ruby older than 2.4 don't have casecmp? (https://github.com/ruby/ruby/blob/v2_4_0/NEWS). The upcoming Redmine 4.0.0 supports Ruby 2.2.2 and later (#25538).

#4 Updated by Go MAEDA over 1 year ago

  • Related to Patch #20369: Use String#casecmp for case insensitive comparison added

#5 Updated by Go MAEDA 9 months ago

  • Target version set to Candidate for next major release

We can merge this patch if Redmine migrates to Rails 6 (maybe in Redmine 5?).

Rails 6 requires Ruby 2.4.1+ by jeremy · Pull Request #32034 · rails/rails

#6 Updated by Go MAEDA 9 months ago

#7 Updated by Go MAEDA 5 months ago

  • Related to Defect #30441: Attachments with Unicode uppercase names are not shown in wiki pages added

#8 Updated by Go MAEDA 4 months ago

Go MAEDA wrote:

But the patch needs some improvements because Ruby older than 2.4 don't have casecmp? (https://github.com/ruby/ruby/blob/v2_4_0/NEWS). The upcoming Redmine 4.0.0 supports Ruby 2.2.2 and later (#25538).

We can apply the patch provided by Амир Мусин and fix the issue for Ruby >=2.4 right now if we define String#casecmp? method like the following.

Even if we define the method, the problem will not fe fixed under Ruby 2.3 because the fake String#casecmp? is not Unicode-aware unlike the genuine String#casecmp?. But I think it is OK because the Ruby team has ended support for 2.3 last month and probably many people who use the latest version of Redmine don't use such old Ruby.

We can delete the definition when Redmine has dropped the support for Ruby 2.3.

diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb
index e0559903b..0154de257 100644
--- a/config/initializers/10-patches.rb
+++ b/config/initializers/10-patches.rb
@@ -213,3 +213,12 @@ module ActionView
     end
   end
 end
+
+if RUBY_VERSION < '2.4'
+  class String
+    # bahaves like String#casecmp? but does not support Unicode
+    def casecmp?(other)
+      self.casecmp(other).zero?
+    end
+  end
+end

Also available in: Atom PDF