Skip to content

Commit 907668a

Browse files
committed
fix(chunk): handle binary data and non-string chunks safely. Fixes #162
1 parent 38b0643 commit 907668a

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

lua/tiny-inline-diagnostic/chunk.lua

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ function M.get_max_width_from_chunks(chunks)
1111
local max_chunk_line_length = 0
1212

1313
for _, chunk in ipairs(chunks) do
14-
local line_length = vim.fn.strdisplaywidth(chunk)
15-
if line_length > max_chunk_line_length then
16-
max_chunk_line_length = line_length
14+
if type(chunk) == "string" then
15+
local ok, line_length = pcall(vim.fn.strdisplaywidth, chunk)
16+
if ok and line_length > max_chunk_line_length then
17+
max_chunk_line_length = line_length
18+
end
1719
end
1820
end
1921

tests/test_chunk.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,24 @@ T["get_max_width_from_chunks"]["handles single chunk"] = function()
2323
MiniTest.expect.equality(result, 6)
2424
end
2525

26+
T["get_max_width_from_chunks"]["handles binary data with null bytes"] = function()
27+
local chunks = { "\x00\xff", "valid text" }
28+
local result = chunk.get_max_width_from_chunks(chunks)
29+
MiniTest.expect.equality(result, vim.fn.strdisplaywidth("valid text"))
30+
end
31+
32+
T["get_max_width_from_chunks"]["ignores non-string chunks"] = function()
33+
local chunks = { "text", 123, "longer text", { "table" }, nil }
34+
local result = chunk.get_max_width_from_chunks(chunks)
35+
MiniTest.expect.equality(result, vim.fn.strdisplaywidth("longer text"))
36+
end
37+
38+
T["get_max_width_from_chunks"]["returns zero for all non-string chunks"] = function()
39+
local chunks = { 123, { "table" }, true, nil }
40+
local result = chunk.get_max_width_from_chunks(chunks)
41+
MiniTest.expect.equality(result, 0)
42+
end
43+
2644
T["get_diagnostic_icon"] = MiniTest.new_set()
2745

2846
T["get_diagnostic_icon"]["returns default icon when use_icons_from_diagnostic is false"] = function()

0 commit comments

Comments
 (0)