mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
fix(vim.text): handle very long strings (#30075)
Lua's string.byte has a maximum (undocumented) allowable length, so vim.text.hencode fails on large strings with the error "string slice too long". Instead of converting the string to an array of bytes up front, convert each character to a byte one at a time.
This commit is contained in:
parent
d1bdeacb00
commit
33464189bc
@ -7,10 +7,9 @@ local M = {}
|
|||||||
--- @param str string String to encode
|
--- @param str string String to encode
|
||||||
--- @return string : Hex encoded string
|
--- @return string : Hex encoded string
|
||||||
function M.hexencode(str)
|
function M.hexencode(str)
|
||||||
local bytes = { str:byte(1, #str) }
|
|
||||||
local enc = {} ---@type string[]
|
local enc = {} ---@type string[]
|
||||||
for i = 1, #bytes do
|
for i = 1, #str do
|
||||||
enc[i] = string.format('%02X', bytes[i])
|
enc[i] = string.format('%02X', str:byte(i, i + 1))
|
||||||
end
|
end
|
||||||
return table.concat(enc)
|
return table.concat(enc)
|
||||||
end
|
end
|
||||||
|
@ -20,5 +20,11 @@ describe('vim.text', function()
|
|||||||
eq(input, vim.text.hexdecode(output))
|
eq(input, vim.text.hexdecode(output))
|
||||||
end
|
end
|
||||||
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)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user