neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit c6d2cbf8f51abfa0c9d244ef384a15b0b69e16c6
parent d98827b634af29d74079d1848dd5e8c5d2be1233
Author: Luuk van Baal <luukvbaal@gmail.com>
Date:   Thu, 23 Jan 2025 12:42:38 +0100

fix(lua): pop retval for fast context LuaRef

Problem:  nlua_call_ref_ctx() does not pop the return value in fast
          context that did not error.
Solution: Fall through to end; calling nlua_call_pop_retval().

Diffstat:
Msrc/nvim/lua/executor.c | 2+-
Mtest/functional/lua/ui_event_spec.lua | 9+++++++++
2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c @@ -1587,8 +1587,8 @@ Object nlua_call_ref_ctx(bool fast, LuaRef ref, const char *name, Array args, Lu if (nlua_fast_cfpcall(lstate, nargs, 1, -1) < 0) { // error is already scheduled, set anyways to convey failure. api_set_error(err, kErrorTypeException, "fast context failure"); + return NIL; } - return NIL; } else if (nlua_pcall(lstate, nargs, 1)) { // if err is passed, the caller will deal with the error. if (err) { diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua @@ -423,4 +423,13 @@ describe('vim.ui_attach', function() {100:Press ENTER or type command to continue}^ | ]]) end) + + it('sourcing invalid file does not crash #32166', function() + exec_lua([[ + local ns = vim.api.nvim_create_namespace("") + vim.ui_attach(ns, { ext_messages = true }, function() end) + ]]) + feed((':luafile %s<CR>'):format(testlog)) + n.assert_alive() + end) end)