fix(inccommand): block errors when parsing command line again (#24374)

Revert the change to ex_getln.c from a741c7fd04
This commit is contained in:
zeertzjq 2023-07-17 10:15:45 +08:00 committed by GitHub
parent f660b79480
commit b60a2ab4cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 2 deletions

View File

@ -261,6 +261,7 @@ static bool do_incsearch_highlighting(int firstc, int *search_delim, incsearch_s
return false;
}
emsg_off++;
exarg_T ea = {
.line1 = 1,
.line2 = 1,
@ -368,6 +369,7 @@ static bool do_incsearch_highlighting(int firstc, int *search_delim, incsearch_s
curwin->w_cursor = save_cursor;
retval = true;
theend:
emsg_off--;
return retval;
}
@ -2427,9 +2429,12 @@ static bool cmdpreview_may_show(CommandLineState *s)
int cmdpreview_type = 0;
char *cmdline = xstrdup(ccline.cmdbuff);
const char *errormsg = NULL;
emsg_off++; // Block errors when parsing the command line, and don't update v:errmsg
if (!parse_cmdline(cmdline, &ea, &cmdinfo, &errormsg)) {
emsg_off--;
goto end;
}
emsg_off--;
// Check if command is previewable, if not, don't attempt to show preview
if (!(ea.argt & EX_PREVIEW)) {

View File

@ -3086,8 +3086,7 @@ end)
it('long :%s/ with inccommand does not collapse cmdline', function()
clear()
local screen = Screen.new(10,5)
common_setup(screen)
command('set inccommand=nosplit')
common_setup(screen, 'nosplit')
feed(':%s/AAAAAAA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A')
screen:expect([[
@ -3099,6 +3098,21 @@ it('long :%s/ with inccommand does not collapse cmdline', function()
]])
end)
it("with 'inccommand' typing invalid `={expr}` does not show error", function()
clear()
local screen = Screen.new(30, 6)
common_setup(screen, 'nosplit')
feed(':edit `=`')
screen:expect([[
|
{15:~ }|
{15:~ }|
{15:~ }|
{15:~ }|
:edit `=`^ |
]])
end)
it("with 'inccommand' typing :filter doesn't segfault or leak memory #19057", function()
clear()
common_setup(nil, 'nosplit')