diff options
author | zeertzjq <zeertzjq@outlook.com> | 2021-12-08 08:41:46 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2021-12-08 08:41:46 +0800 |
commit | c83fedf0bd0cb39ed4706113029b3e358f141707 (patch) | |
tree | 61be7fb93111e137c61c26b06a189b1767535564 /test/functional/terminal/buffer_spec.lua | |
parent | be768be6b7ee896277971593e9287a86bc41efb2 (diff) | |
download | rneovim-c83fedf0bd0cb39ed4706113029b3e358f141707.tar.gz rneovim-c83fedf0bd0cb39ed4706113029b3e358f141707.tar.bz2 rneovim-c83fedf0bd0cb39ed4706113029b3e358f141707.zip |
fix(terminal): return early if there are no invalid rows
Prevent on_lines emitting out-of-bounds line indexes.
Diffstat (limited to 'test/functional/terminal/buffer_spec.lua')
-rw-r--r-- | test/functional/terminal/buffer_spec.lua | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua index 7dcca231ee..f25cfa2039 100644 --- a/test/functional/terminal/buffer_spec.lua +++ b/test/functional/terminal/buffer_spec.lua @@ -6,9 +6,11 @@ local poke_eventloop = helpers.poke_eventloop local eval, feed_command, source = helpers.eval, helpers.feed_command, helpers.source local eq, neq = helpers.eq, helpers.neq local write_file = helpers.write_file -local command= helpers.command +local command = helpers.command local exc_exec = helpers.exc_exec local matches = helpers.matches +local exec_lua = helpers.exec_lua +local sleep = helpers.sleep describe(':terminal buffer', function() local screen @@ -328,3 +330,37 @@ describe('No heap-buffer-overflow when', function() assert_alive() end) end) + +describe('on_lines does not emit out-of-bounds line indexes when', function() + before_each(function() + clear() + exec_lua([[ + function _G.register_callback(bufnr) + _G.cb_error = '' + vim.api.nvim_buf_attach(bufnr, false, { + on_lines = function(_, bufnr, _, firstline, _, _) + local status, msg = pcall(vim.api.nvim_buf_get_offset, bufnr, firstline) + if not status then + _G.cb_error = msg + end + end + }) + end + ]]) + end) + + it('creating a terminal buffer #16394', function() + feed_command([[autocmd TermOpen * ++once call v:lua.register_callback(expand("<abuf>"))]]) + feed_command('terminal') + sleep(500) + eq('', exec_lua([[return _G.cb_error]])) + end) + + it('deleting a terminal buffer #16394', function() + feed_command('terminal') + sleep(500) + feed_command('lua _G.register_callback(0)') + feed_command('bdelete!') + eq('', exec_lua([[return _G.cb_error]])) + end) +end) |