diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 5a355ffe1c..5d15a9cde0 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1011,7 +1011,8 @@ theend: char *p = ccline.cmdbuff; if (ui_has(kUICmdline)) { - if (exmode_active) { + // Emit cmdline_block in Ex mode unless cmdbuff is NULL (happens with #39021). + if (exmode_active && p != NULL) { ui_ext_cmdline_block_append(0, p); } ui_ext_cmdline_hide(s->gotesc); diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 8809142f2e..5123dcb541 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -822,12 +822,14 @@ local function test_cmdline(linegrid) cmdline = { { content = { { '' } }, firstc = ':', pos = 0 } }, cmdline_block = { { { 'echo "foo"' } } }, }) - feed('vis') + -- Shouldn't crash for NULL cmdline_block event after #39021. + feed('vis') screen:expect([[ ^ | {1:~ }|*3 | ]]) + assert_alive() end) it('works with :lua debug.debug()', function()