diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-06-06 15:14:08 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-06-06 15:14:08 +0200 |
commit | 9b7cce28d568f0622d77c6c9878c2d4770c3b164 (patch) | |
tree | e2b44d4a5a64fbeadefebbe8412f88df5ac2639b /src/ex_getln.c | |
parent | 87fda407f8ecf947ba6ce72ac21f69ff04d909cd (diff) |
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.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index 48d40cfc76..c003748e94 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); |