mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix(api): handle NUL in nvim_err_write() and nvim_out_write()
This commit is contained in:
parent
9e7c4fe579
commit
49254ddebe
@ -1709,6 +1709,8 @@ static void write_msg(String message, bool to_err, bool writeln)
|
|||||||
msg_didout = true; \
|
msg_didout = true; \
|
||||||
kv_drop(line_buf, kv_size(line_buf)); \
|
kv_drop(line_buf, kv_size(line_buf)); \
|
||||||
kv_resize(line_buf, LINE_BUFFER_MIN_SIZE); \
|
kv_resize(line_buf, LINE_BUFFER_MIN_SIZE); \
|
||||||
|
} else if (c == NUL) { \
|
||||||
|
kv_push(line_buf, NL); \
|
||||||
} else { \
|
} else { \
|
||||||
kv_push(line_buf, c); \
|
kv_push(line_buf, c); \
|
||||||
}
|
}
|
||||||
|
@ -2053,6 +2053,19 @@ describe('API', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
describe('nvim_out_write', function()
|
describe('nvim_out_write', function()
|
||||||
|
local screen
|
||||||
|
|
||||||
|
before_each(function()
|
||||||
|
screen = Screen.new(40, 8)
|
||||||
|
screen:attach()
|
||||||
|
screen:set_default_attr_ids({
|
||||||
|
[0] = {bold = true, foreground = Screen.colors.Blue},
|
||||||
|
[1] = {bold = true, foreground = Screen.colors.SeaGreen},
|
||||||
|
[2] = {bold = true, reverse = true},
|
||||||
|
[3] = {foreground = Screen.colors.Blue},
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
it('prints long messages correctly #20534', function()
|
it('prints long messages correctly #20534', function()
|
||||||
exec([[
|
exec([[
|
||||||
set more
|
set more
|
||||||
@ -2073,14 +2086,7 @@ describe('API', function()
|
|||||||
eq('\naaa\n' .. ('a'):rep(5002) .. '\naaa', meths.get_var('out'))
|
eq('\naaa\n' .. ('a'):rep(5002) .. '\naaa', meths.get_var('out'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('blank line in message works', function()
|
it('blank line in message', function()
|
||||||
local screen = Screen.new(40, 8)
|
|
||||||
screen:attach()
|
|
||||||
screen:set_default_attr_ids({
|
|
||||||
[0] = {bold = true, foreground = Screen.colors.Blue},
|
|
||||||
[1] = {bold = true, foreground = Screen.colors.SeaGreen},
|
|
||||||
[2] = {bold = true, reverse = true},
|
|
||||||
})
|
|
||||||
feed([[:call nvim_out_write("\na\n")<CR>]])
|
feed([[:call nvim_out_write("\na\n")<CR>]])
|
||||||
screen:expect{grid=[[
|
screen:expect{grid=[[
|
||||||
|
|
|
|
||||||
@ -2105,6 +2111,20 @@ describe('API', function()
|
|||||||
{1:Press ENTER or type command to continue}^ |
|
{1:Press ENTER or type command to continue}^ |
|
||||||
]]}
|
]]}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('NUL bytes in message', function()
|
||||||
|
feed([[:lua vim.api.nvim_out_write('aaa\0bbb\0\0ccc\nddd\0\0\0eee\n')<CR>]])
|
||||||
|
screen:expect{grid=[[
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{2: }|
|
||||||
|
aaa{3:^@}bbb{3:^@^@}ccc |
|
||||||
|
ddd{3:^@^@^@}eee |
|
||||||
|
{1:Press ENTER or type command to continue}^ |
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('nvim_err_write', function()
|
describe('nvim_err_write', function()
|
||||||
@ -2193,6 +2213,20 @@ describe('API', function()
|
|||||||
]])
|
]])
|
||||||
feed('<cr>') -- exit the press ENTER screen
|
feed('<cr>') -- exit the press ENTER screen
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('NUL bytes in message', function()
|
||||||
|
nvim_async('err_write', 'aaa\0bbb\0\0ccc\nddd\0\0\0eee\n')
|
||||||
|
screen:expect{grid=[[
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{3: }|
|
||||||
|
{1:aaa^@bbb^@^@ccc} |
|
||||||
|
{1:ddd^@^@^@eee} |
|
||||||
|
{2:Press ENTER or type command to continue}^ |
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('nvim_err_writeln', function()
|
describe('nvim_err_writeln', function()
|
||||||
|
Loading…
Reference in New Issue
Block a user