aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/text.lua5
-rw-r--r--test/functional/lua/text_spec.lua6
2 files changed, 8 insertions, 3 deletions
diff --git a/runtime/lua/vim/text.lua b/runtime/lua/vim/text.lua
index 0be3396464..d45c8021c6 100644
--- a/runtime/lua/vim/text.lua
+++ b/runtime/lua/vim/text.lua
@@ -7,10 +7,9 @@ local M = {}
--- @param str string String to encode
--- @return string : Hex encoded string
function M.hexencode(str)
- local bytes = { str:byte(1, #str) }
local enc = {} ---@type string[]
- for i = 1, #bytes do
- enc[i] = string.format('%02X', bytes[i])
+ for i = 1, #str do
+ enc[i] = string.format('%02X', str:byte(i, i + 1))
end
return table.concat(enc)
end
diff --git a/test/functional/lua/text_spec.lua b/test/functional/lua/text_spec.lua
index 9e77953c8c..be471bfd62 100644
--- a/test/functional/lua/text_spec.lua
+++ b/test/functional/lua/text_spec.lua
@@ -20,5 +20,11 @@ describe('vim.text', function()
eq(input, vim.text.hexdecode(output))
end
end)
+
+ it('works with very large strings', function()
+ local input, output = string.rep('😂', 2 ^ 16), string.rep('F09F9882', 2 ^ 16)
+ eq(output, vim.text.hexencode(input))
+ eq(input, vim.text.hexdecode(output))
+ end)
end)
end)