diff options
author | José Valim <jose.valim@dashbit.co> | 2021-12-08 23:50:23 +0100 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2021-12-08 23:50:38 +0100 |
commit | 611139ef3ea368f21956451979d60aaecbc81333 (patch) | |
tree | bb503f5d6db10557dc473dd135ddfc8ceaf27646 | |
parent | 1eb6bdafb09b8ebd392bea37eab3fc7e69204808 (diff) | |
download | elixir-611139ef3ea368f21956451979d60aaecbc81333.tar.gz |
Fix codepoint byte counting in slice, closes #11461
-rw-r--r-- | lib/elixir/lib/string.ex | 2 | ||||
-rw-r--r-- | lib/elixir/test/elixir/string_test.exs | 1 |
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) |