Skip to content

Commit 8fcf699

Browse files
committed
Fix String.replace_trailing/3 replacement bug
1 parent 459fc9a commit 8fcf699

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

lib/elixir/lib/string.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ defmodule String do
672672
<<prefix::size(prefix_size)-binary, suffix::size(suffix_size)-binary>> when suffix == match ->
673673
replace_trailing(prefix, match, replacement, prefix_size - suffix_size, suffix_size, acc <> replacement)
674674
_ ->
675-
string
675+
string <> acc
676676
end
677677
end
678678

lib/elixir/test/elixir/string_test.exs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,18 @@ defmodule StringTest do
180180
end
181181

182182
test "replace_trailing" do
183-
assert String.replace_trailing(" abc aa", "a", "") == " abc "
184-
assert String.replace_trailing(" abc __", "_", "") == " abc "
185-
assert String.replace_trailing(" aaaaaaaaa", "a", "") == " "
186-
assert String.replace_trailing("aaaaaaaaaa", "a", "") == ""
187-
assert String.replace_trailing("]]]]]]]]]]", "]", "") == ""
188-
assert String.replace_trailing(" cat 猫猫", "猫", "") == " cat "
189-
assert String.replace_trailing("test", "t", "") == "tes"
190-
assert String.replace_trailing("t", "t", "") == ""
183+
assert String.replace_trailing(" abc aa", "a", "b") == " abc bb"
184+
assert String.replace_trailing(" abc __", "_", "b") == " abc bb"
185+
assert String.replace_trailing(" aaaaaaaa", "a", "b") == " bbbbbbbb"
186+
assert String.replace_trailing(" aaaaaaaa", "aaa", "b") == " aabb"
187+
assert String.replace_trailing("aaaaaaaaa", "a", "b") == "bbbbbbbbb"
188+
assert String.replace_trailing("]]]]]]", "]", "[]") == "[][][][][][]"
189+
assert String.replace_trailing("]]]]]]]]", "]", "") == ""
190+
assert String.replace_trailing("] ]]]]]]", "]", "") == "] "
191+
assert String.replace_trailing(" cat 猫猫", "猫", "й") == " cat йй"
192+
assert String.replace_trailing("test", "t", "T") == "tesT"
193+
assert String.replace_trailing("t", "t", "T") == "T"
194+
assert String.replace_trailing("aaa", "b", "c") == "aaa"
191195
end
192196

193197
test "rstrip" do

0 commit comments

Comments
 (0)