changeset 15935:ff00d207cc5e v8.1.0973

patch 8.1.0973: pattern with syntax error gives threee error messages commit https://github.com/vim/vim/commit/cd62512c5595fa1f7a7f2c6ec1a90ea6bde3ad50 Author: Bram Moolenaar <Bram@vim.org> 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.
author Bram Moolenaar <Bram@vim.org>
date Fri, 22 Feb 2019 17:30:06 +0100
parents 37fa9d019a73
children 8efaa4a54d49
files src/regexp.c src/regexp_nfa.c src/testdir/test_search.vim src/version.c
diffstat 4 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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)
     {
--- 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:
--- 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
--- 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,