summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2026-04-14 14:12:24 +0200
committergithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2026-04-14 14:02:14 +0000
commit4a18c05f87f838cdecc38ea9a274623e69a62285 (patch)
tree0515f124555aaa30b4341445c9a6d770c39a0af1
parent29684ca3cca71f4942197aedc9fc26b505c92d4b (diff)
fix(cmdline): avoid Ex-mode NULL cmdline_block event #39043
Problem: Attempting to emit cmdline_block event with NULL cmdbuff after <C-\><C-N> in Ex-mode. Solution: Don't emit cmdline_block event when cmdbuff is NULL. (cherry picked from commit f0f9620b38e123b3bae419f637612031a89305f8)
-rw-r--r--src/nvim/ex_getln.c3
-rw-r--r--test/functional/ui/cmdline_spec.lua4
2 files changed, 5 insertions, 2 deletions
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 <C-\><C-N> #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<CR>')
+ -- Shouldn't crash for NULL cmdline_block event after <C-\><C-N> #39021.
+ feed('<C-\\><C-N>vis<CR>')
screen:expect([[
^ |
{1:~ }|*3
|
]])
+ assert_alive()
end)
it('works with :lua debug.debug()', function()