mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
ex_getln: Do not goto color_cmdline_end without first cleaning up
The issue with debug mode was actually not cleaning up after `try_enter`: location `&tstate` was pointing to got invalidated and received some “garbage” (actually, values that got stored on the stack afterwards). But pointer to that garbage was still stored in `msg_list`, so next attempt to check it resulted in a crash.
This commit is contained in:
parent
2a6423eba7
commit
f4744e1821
@ -2372,8 +2372,6 @@ static bool color_cmdline(void)
|
||||
dgc_ret = tv_dict_get_callback(&globvardict, S_LEN("Nvim_color_expr"),
|
||||
&color_cb);
|
||||
can_free_cb = true;
|
||||
} else {
|
||||
goto color_cmdline_end;
|
||||
}
|
||||
if (!try_leave(&tstate, &err) || !dgc_ret) {
|
||||
goto color_cmdline_error;
|
||||
|
@ -121,6 +121,7 @@ before_each(function()
|
||||
EOB={bold = true, foreground = Screen.colors.Blue1},
|
||||
ERR={foreground = Screen.colors.Grey100, background = Screen.colors.Red},
|
||||
SK={foreground = Screen.colors.Blue},
|
||||
PE={bold = true, foreground = Screen.colors.SeaGreen4}
|
||||
})
|
||||
end)
|
||||
|
||||
@ -453,6 +454,41 @@ describe('Ex commands coloring support', function()
|
||||
curbufmeths.get_lines(0, -1, false))
|
||||
eq('', funcs.execute('messages'))
|
||||
end)
|
||||
it('does not crash when using `n` in debug mode', function()
|
||||
feed(':debug execute "echo 1"\n')
|
||||
screen:expect([[
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
Entering Debug mode. Type "cont" to con|
|
||||
tinue. |
|
||||
cmd: execute "echo 1" |
|
||||
>^ |
|
||||
]])
|
||||
feed('n\n')
|
||||
screen:expect([[
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
Entering Debug mode. Type "cont" to con|
|
||||
tinue. |
|
||||
cmd: execute "echo 1" |
|
||||
>n |
|
||||
1 |
|
||||
{PE:Press ENTER or type command to continue}^ |
|
||||
]])
|
||||
feed('\n')
|
||||
screen:expect([[
|
||||
^ |
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
{EOB:~ }|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
||||
-- TODO Specifically test for coloring in cmdline and expr modes
|
||||
|
Loading…
Reference in New Issue
Block a user