Project

General

Profile

Actions

Defect #27780

closed

Case-insensitive matching fails for Unicode filenames when referring to attachments in text formatting

Added by Амир Мусин over 6 years ago. Updated about 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Text formatting
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed
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


Files

attachment.rb.patch (404 Bytes) attachment.rb.patch Амир Мусин, 2017-12-11 17:47
27780.patch (1.29 KB) 27780.patch Go MAEDA, 2020-10-22 16:29

Related issues

Related to Redmine - Patch #20369: Use String#casecmp for case insensitive comparisonClosed

Actions
Related to Redmine - Defect #30441: Attachments with Unicode uppercase names are not shown in wiki pagesClosedGo MAEDA

Actions
Related to Redmine - Feature #34142: Drop Ruby 2.3 supportClosedGo MAEDA

Actions
Actions #1

Updated by Toshi MARUYAMA over 6 years ago

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

Updated by Toshi MARUYAMA over 6 years ago

Actions #3

Updated by Go MAEDA over 6 years 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).

Actions #4

Updated by Go MAEDA over 6 years ago

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

Updated by Go MAEDA over 5 years 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

Actions #6

Updated by Go MAEDA over 5 years ago

  • Related to Feature #29914: Migrate to Rails 6.1 with Zeitwerk autoloading added
Actions #7

Updated by Go MAEDA almost 5 years ago

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

Updated by Go MAEDA almost 5 years 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
Actions #9

Updated by Go MAEDA over 3 years ago

  • Related to deleted (Feature #29914: Migrate to Rails 6.1 with Zeitwerk autoloading)
Actions #10

Updated by Go MAEDA over 3 years ago

Actions #11

Updated by Go MAEDA over 3 years ago

Go MAEDA wrote:

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.

It is not necessary now because the trunk dropped support for Ruby 2.3 (#34142).

Actions #12

Updated by Go MAEDA over 3 years ago

Added test code to Амир Мусин's patch.

Actions #13

Updated by Go MAEDA over 3 years ago

  • Target version changed from Candidate for next major release to 4.2.0

Setting the target version to 4.2.0.

Actions #14

Updated by Marius BĂLTEANU about 3 years ago

Looks good to me.

Actions #15

Updated by Go MAEDA about 3 years ago

  • Subject changed from Attachment sort doesn't work with Unicode to Case-insensitive matching fails for Unicode filenames when referring to attachments in text formatting
  • Category changed from Attachments to Text formatting
  • Status changed from New to Closed
  • Assignee set to Go MAEDA
  • Resolution set to Fixed

Committed the fix.

Actions

Also available in: Atom PDF