changeset 15812:3808b583889e v8.1.0913

patch 8.1.0913: CI crashes when running out of memory commit https://github.com/vim/vim/commit/688b3983d8b321e0d32dd51914fa474a0988daf6 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 13 21:47:36 2019 +0100 patch 8.1.0913: CI crashes when running out of memory Problem: CI crashes when running out of memory. Solution: Apply 'maxmempattern' also to new regexp engine.
author Bram Moolenaar <Bram@vim.org>
date Wed, 13 Feb 2019 22:00:07 +0100
parents efcccd2b7f46
children ad21b64216aa
files src/regexp_nfa.c src/version.c
diffstat 2 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -4445,13 +4445,20 @@ skip_add:
 		    goto skip_add;
 	    }
 
-	    /* When there are backreferences or PIMs the number of states may
-	     * be (a lot) bigger than anticipated. */
+	    // When there are backreferences or PIMs the number of states may
+	    // be (a lot) bigger than anticipated.
 	    if (l->n == l->len)
 	    {
 		int		newlen = l->len * 3 / 2 + 50;
+		size_t		newsize = newlen * sizeof(nfa_thread_T);
 		nfa_thread_T	*newt;
 
+		if ((long)(newsize >> 10) >= p_mmp)
+		{
+		    emsg(_(e_maxmempat));
+		    --depth;
+		    return NULL;
+		}
 		if (subs != &temp_subs)
 		{
 		    /* "subs" may point into the current array, need to make a
@@ -4464,7 +4471,7 @@ skip_add:
 		    subs = &temp_subs;
 		}
 
-		newt = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
+		newt = vim_realloc(l->t, newsize);
 		if (newt == NULL)
 		{
 		    // out of memory
@@ -4785,9 +4792,15 @@ addstate_here(
 	    /* not enough space to move the new states, reallocate the list
 	     * and move the states to the right position */
 	    int		    newlen = l->len * 3 / 2 + 50;
+	    size_t	    newsize = newlen * sizeof(nfa_thread_T);
 	    nfa_thread_T    *newl;
 
-	    newl = (nfa_thread_T *)alloc(newlen * sizeof(nfa_thread_T));
+	    if ((long)(newsize >> 10) >= p_mmp)
+	    {
+		emsg(_(e_maxmempat));
+		return NULL;
+	    }
+	    newl = (nfa_thread_T *)alloc(newsize);
 	    if (newl == NULL)
 		return NULL;
 	    l->len = newlen;
--- a/src/version.c
+++ b/src/version.c
@@ -784,6 +784,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    913,
+/**/
     912,
 /**/
     911,