Skip to content

Commit 459fc9a

Browse files
committed
Fix String.replace_leading/3 replacement bug
1 parent 5642454 commit 459fc9a

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

lib/elixir/lib/string.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ defmodule String do
634634
<<prefix::size(prefix_size)-binary, suffix::size(suffix_size)-binary>> when prefix == match ->
635635
replace_leading(suffix, match, replacement, prefix_size, suffix_size - prefix_size, acc <> replacement)
636636
_ ->
637-
string
637+
acc <> string
638638
end
639639
end
640640

lib/elixir/test/elixir/string_test.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,21 @@ defmodule StringTest do
164164
assert String.capitalize("fin") == "Fin"
165165
end
166166

167+
test "replace_leading" do
168+
assert String.replace_leading("aa abc ", "a", "b") == "bb abc "
169+
assert String.replace_leading("__ abc ", "_", "b") == "bb abc "
170+
assert String.replace_leading("aaaaaaaa ", "a", "b") == "bbbbbbbb "
171+
assert String.replace_leading("aaaaaaaa ", "aaa", "b") == "bbaa "
172+
assert String.replace_leading("aaaaaaaaa", "a", "b") == "bbbbbbbbb"
173+
assert String.replace_leading("]]]]]]", "]", "[]") == "[][][][][][]"
174+
assert String.replace_leading("]]]]]]]]", "]", "") == ""
175+
assert String.replace_leading("]]]]]] ]", "]", "") == " ]"
176+
assert String.replace_leading("猫猫 cat ", "猫", "й") == "йй cat "
177+
assert String.replace_leading("test", "t", "T") == "Test"
178+
assert String.replace_leading("t", "t", "T") == "T"
179+
assert String.replace_leading("aaa", "b", "c") == "aaa"
180+
end
181+
167182
test "replace_trailing" do
168183
assert String.replace_trailing(" abc aa", "a", "") == " abc "
169184
assert String.replace_trailing(" abc __", "_", "") == " abc "

0 commit comments

Comments
 (0)