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"),
|
dgc_ret = tv_dict_get_callback(&globvardict, S_LEN("Nvim_color_expr"),
|
||||||
&color_cb);
|
&color_cb);
|
||||||
can_free_cb = true;
|
can_free_cb = true;
|
||||||
} else {
|
|
||||||
goto color_cmdline_end;
|
|
||||||
}
|
}
|
||||||
if (!try_leave(&tstate, &err) || !dgc_ret) {
|
if (!try_leave(&tstate, &err) || !dgc_ret) {
|
||||||
goto color_cmdline_error;
|
goto color_cmdline_error;
|
||||||
|
@ -121,6 +121,7 @@ before_each(function()
|
|||||||
EOB={bold = true, foreground = Screen.colors.Blue1},
|
EOB={bold = true, foreground = Screen.colors.Blue1},
|
||||||
ERR={foreground = Screen.colors.Grey100, background = Screen.colors.Red},
|
ERR={foreground = Screen.colors.Grey100, background = Screen.colors.Red},
|
||||||
SK={foreground = Screen.colors.Blue},
|
SK={foreground = Screen.colors.Blue},
|
||||||
|
PE={bold = true, foreground = Screen.colors.SeaGreen4}
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -453,6 +454,41 @@ describe('Ex commands coloring support', function()
|
|||||||
curbufmeths.get_lines(0, -1, false))
|
curbufmeths.get_lines(0, -1, false))
|
||||||
eq('', funcs.execute('messages'))
|
eq('', funcs.execute('messages'))
|
||||||
end)
|
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)
|
end)
|
||||||
|
|
||||||
-- TODO Specifically test for coloring in cmdline and expr modes
|
-- TODO Specifically test for coloring in cmdline and expr modes
|
||||||
|
Loading…
Reference in New Issue
Block a user