Skip to content

Commit 3f8e31a

Browse files
authored
Merge pull request rails#46615 from nickh/nh-fix-transliterate
Return a copy of the source string when transliterating
2 parents c354e23 + 5623f7f commit 3f8e31a

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

activesupport/lib/active_support/inflector/transliterate.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ def transliterate(string, replacement = "?", locale: nil)
6565
raise ArgumentError, "Can only transliterate strings. Received #{string.class.name}" unless string.is_a?(String)
6666
raise ArgumentError, "Cannot transliterate strings with #{string.encoding} encoding" unless ALLOWED_ENCODINGS_FOR_TRANSLITERATE.include?(string.encoding)
6767

68+
return string.dup if string.ascii_only?
6869
string = string.dup if string.frozen?
69-
return string if string.ascii_only?
7070

7171
input_encoding = string.encoding
7272

activesupport/test/transliterate_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,11 @@ def test_transliterate_handles_strings_with_invalid_gb18030_bytes
106106
string = String.new("\255", encoding: Encoding::GB18030).freeze
107107
assert_equal "?", ActiveSupport::Inflector.transliterate(string)
108108
end
109+
110+
def test_transliterate_returns_a_copy_of_ascii_strings
111+
string = "Test String".dup
112+
assert_not string.frozen?
113+
assert string.ascii_only?
114+
assert_not_equal string.object_id, ActiveSupport::Inflector.transliterate(string).object_id
115+
end
109116
end

0 commit comments

Comments
 (0)