summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2021-12-08 23:50:23 +0100
committerJosé Valim <jose.valim@dashbit.co>2021-12-08 23:50:38 +0100
commit611139ef3ea368f21956451979d60aaecbc81333 (patch)
treebb503f5d6db10557dc473dd135ddfc8ceaf27646
parent1eb6bdafb09b8ebd392bea37eab3fc7e69204808 (diff)
downloadelixir-611139ef3ea368f21956451979d60aaecbc81333.tar.gz
Fix codepoint byte counting in slice, closes #11461
-rw-r--r--lib/elixir/lib/string.ex2
-rw-r--r--lib/elixir/test/elixir/string_test.exs1
2 files changed, 2 insertions, 1 deletions
diff --git a/lib/elixir/lib/string.ex b/lib/elixir/lib/string.ex
index 975190d45..11dac14eb 100644
--- a/lib/elixir/lib/string.ex
+++ b/lib/elixir/lib/string.ex
@@ -2736,7 +2736,7 @@ defmodule String do
end
end
- defp codepoint_byte_size(cp) when cp <= 0x00FF, do: 1
+ defp codepoint_byte_size(cp) when cp <= 0x007F, do: 1
defp codepoint_byte_size(cp) when cp <= 0x07FF, do: 2
defp codepoint_byte_size(cp) when cp <= 0xFFFF, do: 3
defp codepoint_byte_size(_), do: 4
diff --git a/lib/elixir/test/elixir/string_test.exs b/lib/elixir/test/elixir/string_test.exs
index 16e5c13b6..8ceccc344 100644
--- a/lib/elixir/test/elixir/string_test.exs
+++ b/lib/elixir/test/elixir/string_test.exs
@@ -652,6 +652,7 @@ defmodule StringTest do
assert String.slice("あいうえお", -10..-15) == ""
assert String.slice("hello あいうえお Unicode", 8..-1) == "うえお Unicode"
assert String.slice("abc", -1..14) == "c"
+ assert String.slice("a·̀ͯ‿.⁀:", 0..-2) == "a·̀ͯ‿.⁀"
assert_raise FunctionClauseError, fn ->
String.slice(nil, 0..1)