changeset 6594:3cca9b0cc1a0 v7.4.623

updated for version 7.4.623 Problem: Crash with pattern: \(\)\{80000} (Dominique Pelle) Solution: When the max limit is large fall back to the old engine.
author Bram Moolenaar <bram@vim.org>
date Tue, 10 Feb 2015 18:18:17 +0100
parents cd5eff09c1ae
children 09b0a3c8af26
files src/regexp_nfa.c src/version.c
diffstat 2 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -2034,9 +2034,10 @@ nfa_regpiece()
 	    }
 
 	    /* The engine is very inefficient (uses too many states) when the
-	     * maximum is much larger than the minimum.  Bail out if we can
-	     * use the other engine. */
-	    if ((nfa_re_flags & RE_AUTO) && maxval > minval + 200)
+	     * maximum is much larger than the minimum and when the maximum is
+	     * large.  Bail out if we can use the other engine. */
+	    if ((nfa_re_flags & RE_AUTO)
+				   && (maxval > minval + 200 || maxval > 500))
 		return FAIL;
 
 	    /* Ignore previous call to nfa_regatom() */
@@ -4254,7 +4255,6 @@ state_in_list(l, state, subs)
  * Add "state" and possibly what follows to state list ".".
  * Returns "subs_arg", possibly copied into temp_subs.
  */
-
     static regsubs_T *
 addstate(l, state, subs_arg, pim, off)
     nfa_list_T		*l;	    /* runtime state list */
@@ -4392,6 +4392,7 @@ skip_add:
 		    subs = &temp_subs;
 		}
 
+		/* TODO: check for vim_realloc() returning NULL. */
 		l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
 		l->len = newlen;
 	    }
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    623,
+/**/
     622,
 /**/
     621,