Skip to content

Commit 75d679c

Browse files
josevalimJosé Valim
authored andcommitted
Merge pull request #4247 from stephenmoloney/rstrip-bug
String.replace_trailing bug fix.
1 parent 2c9f28e commit 75d679c

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

lib/elixir/lib/string.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ defmodule String do
661661
replace_trailing(string, match, replacement, prefix_size, suffix_size, "")
662662
end
663663

664-
defp replace_trailing(string, match, replacement, prefix_size, suffix_size, acc) when prefix_size > 0 do
664+
defp replace_trailing(string, match, replacement, prefix_size, suffix_size, acc) when prefix_size >= 0 do
665665
case string do
666666
<<prefix::size(prefix_size)-binary, suffix::size(suffix_size)-binary>> when suffix == match ->
667667
replace_trailing(prefix, match, replacement, prefix_size - suffix_size, suffix_size, acc <> replacement)

lib/elixir/test/elixir/string_test.exs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,17 @@ defmodule StringTest do
160160
assert String.capitalize("fin") == "Fin"
161161
end
162162

163+
test "replace_trailing" do
164+
assert String.replace_trailing(" abc aa", "a", "") == " abc "
165+
assert String.replace_trailing(" abc __", "_", "") == " abc "
166+
assert String.replace_trailing(" aaaaaaaaa", "a", "") == " "
167+
assert String.replace_trailing("aaaaaaaaaa", "a", "") == ""
168+
assert String.replace_trailing("]]]]]]]]]]", "]", "") == ""
169+
assert String.replace_trailing(" cat 猫猫", "猫", "") == " cat "
170+
assert String.replace_trailing("test", "t", "") == "tes"
171+
assert String.replace_trailing("t", "t", "") == ""
172+
end
173+
163174
test "rstrip" do
164175
assert String.rstrip("") == ""
165176
assert String.rstrip("1\n") == "1"
@@ -172,6 +183,9 @@ defmodule StringTest do
172183
assert String.rstrip("a abc a" <> <<194, 133>>) == "a abc a"
173184
assert String.rstrip(" abc aa", ?a) == " abc "
174185
assert String.rstrip(" abc __", ?_) == " abc "
186+
assert String.rstrip(" aaaaaaaaa", ?a) == " "
187+
assert String.rstrip("aaaaaaaaaa", ?a) == ""
188+
assert String.rstrip("]]]]]]]]]]", ?]) == ""
175189
assert String.rstrip(" cat 猫猫", ?猫) == " cat "
176190
end
177191

0 commit comments

Comments
 (0)