lua: do not crash on syntax error in debug.debug()

This commit is contained in:
Björn Linse 2019-08-04 19:42:31 +02:00
parent d3a7bdefb0
commit e6d77993d1
2 changed files with 77 additions and 3 deletions

View File

@ -449,11 +449,10 @@ int nlua_debug(lua_State *lstate)
if (luaL_loadbuffer(lstate, (const char *)input.vval.v_string, if (luaL_loadbuffer(lstate, (const char *)input.vval.v_string,
STRLEN(input.vval.v_string), "=(debug command)")) { STRLEN(input.vval.v_string), "=(debug command)")) {
nlua_error(lstate, _("E5115: Error while loading debug string: %.*s")); nlua_error(lstate, _("E5115: Error while loading debug string: %.*s"));
} } else if (lua_pcall(lstate, 0, 0, 0)) {
tv_clear(&input);
if (lua_pcall(lstate, 0, 0, 0)) {
nlua_error(lstate, _("E5116: Error while calling debug string: %.*s")); nlua_error(lstate, _("E5116: Error while calling debug string: %.*s"));
} }
tv_clear(&input);
} }
return 0; return 0;
} }

View File

@ -207,6 +207,81 @@ describe('debug.debug', function()
{cr:Press ENTER or type command to continue}^ | {cr:Press ENTER or type command to continue}^ |
]]) ]])
end) end)
it("can be safely exited with 'cont'", function()
feed('<cr>')
feed(':lua debug.debug() print("x")<cr>')
screen:expect{grid=[[
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
lua_debug> ^ |
]]}
feed("conttt<cr>") -- misspelled cont; invalid syntax
screen:expect{grid=[[
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
lua_debug> conttt |
{E:E5115: Error while loading debug string: (debug comma}|
{E:nd):1: '=' expected near '<eof>'} |
lua_debug> ^ |
]]}
feed("cont<cr>") -- exactly "cont", exit now
screen:expect{grid=[[
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
lua_debug> conttt |
{E:E5115: Error while loading debug string: (debug comma}|
{E:nd):1: '=' expected near '<eof>'} |
lua_debug> cont |
x |
{cr:Press ENTER or type command to continue}^ |
]]}
feed('<cr>')
screen:expect{grid=[[
^ |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
|
]]}
end)
end) end)
describe('package.path/package.cpath', function() describe('package.path/package.cpath', function()