mirror of
https://github.com/neovim/neovim.git
synced 2026-01-06 21:37:43 +00:00
functests: Test for error conditions
During testing found the following bugs:
1. msgpack-gen.lua script is completely unprepared for Float values either in
return type or in arguments. Specifically:
1. At the time of writing relevant code FLOAT_OBJ did not exist as well as
FLOATING_OBJ, but it would be used by msgpack-gen.lua should return type
be Float. I added FLOATING_OBJ macros later because did not know that
msgpack-gen.lua uses these _OBJ macros, otherwise it would be FLOAT_OBJ.
2. msgpack-gen.lua should use .data.floating in place of .data.float. But it
did not expect that .data subattribute may have name different from
lowercased type name.
2. vim_replace_termcodes returned its argument as-is if it receives an empty
string (as well as _vim_id*() functions did). But if something in returned
argument lives in an allocated memory such action will cause double free:
once when freeing arguments, then when freeing return value. It did not cause
problems yet because msgpack bindings return empty string as {NULL, 0} and
nothing was actually allocated.
3. New code in msgpack-gen.lua popped arguments in reversed order, making lua
bindings’ signatures be different from API ones.
This commit is contained in:
@@ -219,6 +219,17 @@ describe('api', function()
|
||||
eq('\128\253\44', helpers.nvim('replace_termcodes',
|
||||
'<LeftMouse>', true, true, true))
|
||||
end)
|
||||
|
||||
it('does not crash when transforming an empty string', function()
|
||||
-- Actually does not test anything, because current code will use NULL for
|
||||
-- an empty string.
|
||||
--
|
||||
-- Problem here is that if String argument has .data in allocated memory
|
||||
-- then `return str` in vim_replace_termcodes body will make Neovim free
|
||||
-- `str.data` twice: once when freeing arguments, then when freeing return
|
||||
-- value.
|
||||
eq('', meths.replace_termcodes('', true, true, true))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('nvim_feedkeys', function()
|
||||
|
||||
Reference in New Issue
Block a user