fix(lua): assert failure with vim.regex() error inside :silent! (#20555)

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
RZia
2022-10-09 20:04:08 -04:00
committed by GitHub
parent 9d0ed754d5
commit a5597d1fc0
2 changed files with 8 additions and 1 deletions

View File

@@ -304,8 +304,10 @@ int nlua_regex(lua_State *lstate)
nlua_push_errstr(lstate, "couldn't parse regex: %s", err.msg); nlua_push_errstr(lstate, "couldn't parse regex: %s", err.msg);
api_clear_error(&err); api_clear_error(&err);
return lua_error(lstate); return lua_error(lstate);
} else if (prog == NULL) {
nlua_push_errstr(lstate, "couldn't parse regex");
return lua_error(lstate);
} }
assert(prog);
regprog_T **p = lua_newuserdata(lstate, sizeof(regprog_T *)); regprog_T **p = lua_newuserdata(lstate, sizeof(regprog_T *));
*p = prog; *p = prog;

View File

@@ -24,6 +24,7 @@ local rmdir = helpers.rmdir
local write_file = helpers.write_file local write_file = helpers.write_file
local expect_exit = helpers.expect_exit local expect_exit = helpers.expect_exit
local poke_eventloop = helpers.poke_eventloop local poke_eventloop = helpers.poke_eventloop
local assert_alive = helpers.assert_alive
describe('lua stdlib', function() describe('lua stdlib', function()
before_each(clear) before_each(clear)
@@ -2210,6 +2211,10 @@ describe('lua stdlib', function()
eq({3,7}, exec_lua[[return {re1:match_line(0, 1, 1, 8)}]]) eq({3,7}, exec_lua[[return {re1:match_line(0, 1, 1, 8)}]])
eq({}, exec_lua[[return {re1:match_line(0, 1, 1, 7)}]]) eq({}, exec_lua[[return {re1:match_line(0, 1, 1, 7)}]])
eq({0,3}, exec_lua[[return {re1:match_line(0, 1, 0, 7)}]]) eq({0,3}, exec_lua[[return {re1:match_line(0, 1, 0, 7)}]])
-- vim.regex() error inside :silent! should not crash. #20546
command([[silent! lua vim.regex('\\z')]])
assert_alive()
end) end)
it('vim.defer_fn', function() it('vim.defer_fn', function()