diff options
| author | luukvbaal <luukvbaal@gmail.com> | 2026-04-14 14:12:24 +0200 |
|---|---|---|
| committer | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2026-04-14 14:02:14 +0000 |
| commit | 4a18c05f87f838cdecc38ea9a274623e69a62285 (patch) | |
| tree | 0515f124555aaa30b4341445c9a6d770c39a0af1 | |
| parent | 29684ca3cca71f4942197aedc9fc26b505c92d4b (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.c | 3 | ||||
| -rw-r--r-- | test/functional/ui/cmdline_spec.lua | 4 |
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() |
