summaryrefslogtreecommitdiff
path: root/src/ex_getln.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-06 15:14:08 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-06 15:14:08 +0200
commit9b7cce28d568f0622d77c6c9878c2d4770c3b164 (patch)
treee2b44d4a5a64fbeadefebbe8412f88df5ac2639b /src/ex_getln.c
parent87fda407f8ecf947ba6ce72ac21f69ff04d909cd (diff)
downloadvim-git-9b7cce28d568f0622d77c6c9878c2d4770c3b164.tar.gz
patch 8.2.0911: crash when opening a buffer for the cmdline window failsv8.2.0911
Problem: Crash when opening a buffer for the cmdline window fails. (Chris Barber) Solution: Check do_ecmd() succeeds. Reset got_int if "q" was used at the more prompt. (closes #6211)
Diffstat (limited to 'src/ex_getln.c')
-rw-r--r--src/ex_getln.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 48d40cfc7..c003748e9 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -682,7 +682,8 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
// NOTE: must call restore_last_search_pattern() before returning!
save_last_search_pattern();
- if (!do_incsearch_highlighting(firstc, &search_delim, is_state, &skiplen, &patlen))
+ if (!do_incsearch_highlighting(firstc, &search_delim, is_state,
+ &skiplen, &patlen))
{
restore_last_search_pattern();
return FAIL;
@@ -4205,10 +4206,19 @@ open_cmdwin(void)
ga_clear(&winsizes);
return K_IGNORE;
}
- cmdwin_type = get_cmdline_type();
+ // Don't let quitting the More prompt make this fail.
+ got_int = FALSE;
// Create the command-line buffer empty.
- (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+ if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL) == FAIL)
+ {
+ // Some autocommand messed it up?
+ win_close(curwin, TRUE);
+ ga_clear(&winsizes);
+ return Ctrl_C;
+ }
+ cmdwin_type = get_cmdline_type();
+
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
(void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);