diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-06-01 20:17:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-01 20:17:52 +0800 |
commit | f40adf770d090d12f7b14dd519fe649ada40bfe6 (patch) | |
tree | f4bb8fdf06c6491cadee34ef59a8ff11aabef633 | |
parent | c632f64e247c672e425f609bb47a9ab0517a4c31 (diff) | |
download | rneovim-f40adf770d090d12f7b14dd519fe649ada40bfe6.tar.gz rneovim-f40adf770d090d12f7b14dd519fe649ada40bfe6.tar.bz2 rneovim-f40adf770d090d12f7b14dd519fe649ada40bfe6.zip |
fix(inccommand): do not try to preview an ambiguous command (#18827)
-rw-r--r-- | src/nvim/ex_docmd.c | 3 | ||||
-rw-r--r-- | test/functional/ui/inccommand_user_spec.lua | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 4b462994be..0e9c8dcf01 100644 --- 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 index e2cd82943e..6c54ede582 100644 --- 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) |