commit f40adf770d090d12f7b14dd519fe649ada40bfe6
parent c632f64e247c672e425f609bb47a9ab0517a4c31
Author: zeertzjq <zeertzjq@outlook.com>
Date: Wed, 1 Jun 2022 20:17:52 +0800
fix(inccommand): do not try to preview an ambiguous command (#18827)
Diffstat:
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
@@ -10133,9 +10133,8 @@ bool cmd_can_preview(char *cmd)
if (*ea.cmd == '*') {
ea.cmd = skipwhite(ea.cmd + 1);
}
- find_ex_command(&ea, NULL);
- if (ea.cmdidx == CMD_SIZE) {
+ if (find_ex_command(&ea, NULL) == NULL || ea.cmdidx == CMD_SIZE) {
return false;
} else if (!IS_USER_CMDIDX(ea.cmdidx)) {
// find_ex_command sets the flags for user commands automatically
diff --git a/test/functional/ui/inccommand_user_spec.lua b/test/functional/ui/inccommand_user_spec.lua
@@ -5,6 +5,7 @@ local exec_lua = helpers.exec_lua
local insert = helpers.insert
local feed = helpers.feed
local command = helpers.command
+local assert_alive = helpers.assert_alive
-- Implements a :Replace command that works like :substitute.
local setup_replace_cmd = [[
@@ -326,4 +327,13 @@ describe("'inccommand' for user commands", function()
:.Replace text cats^ |
]])
end)
+
+ it('does not crash on ambiguous command #18825', function()
+ command('set inccommand=split')
+ command('command Reply echo 1')
+ feed(':R')
+ assert_alive()
+ feed('e')
+ assert_alive()
+ end)
end)