From 15bc930fca94a43fb5546b48d7c09cf223b63233 Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Wed, 12 Feb 2025 17:20:51 +0100 Subject: fix(memline): don't check line count for closed memline #32403 Problem: Error thrown when for invalid line number which may be accessed in an `on_detach` callback at which point line count is intentionally set to 0. Solution: Move empty memline check to before line number check. --- test/functional/lua/buffer_updates_spec.lua | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'test/functional/lua/buffer_updates_spec.lua') diff --git a/test/functional/lua/buffer_updates_spec.lua b/test/functional/lua/buffer_updates_spec.lua index 7d034222c8..b9c1e9f897 100644 --- a/test/functional/lua/buffer_updates_spec.lua +++ b/test/functional/lua/buffer_updates_spec.lua @@ -305,6 +305,24 @@ describe('lua buffer event callbacks: on_lines', function() n.assert_alive() end) + it('no invalid lnum error for closed memline in on_detach #31251', function() + eq(vim.NIL, exec_lua('return _G.did_detach')) + exec_lua([[ + vim.api.nvim_buf_set_lines(0, 0, -1, false, { '' }) + local bufname = 'buf2' + local buf = vim.api.nvim_create_buf(false, true) + vim.api.nvim_buf_set_name(buf, bufname) + vim.bo[buf].bufhidden = 'wipe' + vim.cmd('vertical diffsplit '..bufname) + vim.api.nvim_buf_attach(0, false, { on_detach = function() + vim.cmd("redraw") + _G.did_detach = true + end}) + vim.cmd.bdelete() + ]]) + eq(true, exec_lua('return _G.did_detach')) + end) + it('#12718 lnume', function() api.nvim_buf_set_lines(0, 0, -1, true, { '1', '2', '3' }) exec_lua(function() -- cgit