# HG changeset patch # User Bram Moolenaar # Date 1550853006 -3600 # Node ID ff00d207cc5efbe2930a543eac7facdbb4f50c96 # Parent 37fa9d019a7331731ff59b3cd544d65b1d35666f patch 8.1.0973: pattern with syntax error gives threee error messages commit https://github.com/vim/vim/commit/cd62512c5595fa1f7a7f2c6ec1a90ea6bde3ad50 Author: Bram Moolenaar Date: Fri Feb 22 17:29:43 2019 +0100 patch 8.1.0973: pattern with syntax error gives threee error messages Problem: Pattern with syntax error gives threee error messages. (Kuang-che Wu) Solution: Remove outdated internal error. Don't fall back to other engine after an error. diff --git a/src/regexp.c b/src/regexp.c --- a/src/regexp.c +++ b/src/regexp.c @@ -7969,6 +7969,7 @@ vim_regcomp(char_u *expr_arg, int re_fla { regprog_T *prog = NULL; char_u *expr = expr_arg; + int save_called_emsg; regexp_engine = p_re; @@ -8004,6 +8005,8 @@ vim_regcomp(char_u *expr_arg, int re_fla /* * First try the NFA engine, unless backtracking was requested. */ + save_called_emsg = called_emsg; + called_emsg = FALSE; if (regexp_engine != BACKTRACKING_ENGINE) prog = nfa_regengine.regcomp(expr, re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0)); @@ -8032,13 +8035,15 @@ vim_regcomp(char_u *expr_arg, int re_fla * If the NFA engine failed, try the backtracking engine. * The NFA engine also fails for patterns that it can't handle well * but are still valid patterns, thus a retry should work. + * But don't try if an error message was given. */ - if (regexp_engine == AUTOMATIC_ENGINE) + if (regexp_engine == AUTOMATIC_ENGINE && !called_emsg) { regexp_engine = BACKTRACKING_ENGINE; prog = bt_regengine.regcomp(expr, re_flags); } } + called_emsg |= save_called_emsg; if (prog != NULL) { diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -7252,12 +7252,7 @@ nfa_regcomp(char_u *expr, int re_flags) * (and count its size). */ postfix = re2post(); if (postfix == NULL) - { - /* TODO: only give this error for debugging? */ - if (post_ptr >= post_end) - siemsg("Internal error: estimated max number of states insufficient: %ld", post_end - post_start); goto fail; /* Cascaded (syntax?) error */ - } /* * In order to build the NFA, we parse the input regexp twice: diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -1220,3 +1220,8 @@ func Test_large_hex_chars() call assert_match('E678:', v:exception) endtry endfunc + +func Test_one_error_msg() + " This was also giving an internal error + call assert_fails('call search(" \\((\\v[[=P=]]){185}+ ")', 'E871:') +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -780,6 +780,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 973, +/**/ 972, /**/ 971,