summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-05-25 21:18:34 +0200
committerBram Moolenaar <Bram@vim.org>2013-05-25 21:18:34 +0200
commitaae4883e01d70d6075e250f4116b6888aca93594 (patch)
treef07423e3b554ec565c4d18979dda8fa0d8115c62
parent4b41706477bccb6f0b3f5154f09af30e9fc4f452 (diff)
downloadvim-git-aae4883e01d70d6075e250f4116b6888aca93594.tar.gz
updated for version 7.3.1018v7.3.1018
Problem: New regexp engine wastes memory. Solution: Allocate prog with actual number of states, not estimated maximum number of sates.
-rw-r--r--src/regexp_nfa.c18
-rw-r--r--src/version.c2
2 files changed, 11 insertions, 9 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 10b6af5cd..273216379 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -3758,7 +3758,7 @@ nfa_regcomp(expr, re_flags)
char_u *expr;
int re_flags;
{
- nfa_regprog_T *prog;
+ nfa_regprog_T *prog = NULL;
size_t prog_size;
int *postfix;
@@ -3774,15 +3774,8 @@ nfa_regcomp(expr, re_flags)
if (nfa_regcomp_start(expr, re_flags) == FAIL)
return NULL;
- /* Space for compiled regexp */
- prog_size = sizeof(nfa_regprog_T) + sizeof(nfa_state_T) * nstate_max;
- prog = (nfa_regprog_T *)lalloc(prog_size, TRUE);
- if (prog == NULL)
- goto fail;
- vim_memset(prog, 0, prog_size);
-
/* Build postfix form of the regexp. Needed to build the NFA
- * (and count its size) */
+ * (and count its size). */
postfix = re2post();
if (postfix == NULL)
goto fail; /* Cascaded (syntax?) error */
@@ -3809,6 +3802,13 @@ nfa_regcomp(expr, re_flags)
* Count number of NFA states in "nstate". Do not build the NFA.
*/
post2nfa(postfix, post_ptr, TRUE);
+
+ /* Space for compiled regexp */
+ prog_size = sizeof(nfa_regprog_T) + sizeof(nfa_state_T) * nstate;
+ prog = (nfa_regprog_T *)lalloc(prog_size, TRUE);
+ if (prog == NULL)
+ goto fail;
+ vim_memset(prog, 0, prog_size);
state_ptr = prog->state;
/*
diff --git a/src/version.c b/src/version.c
index 6d745d380..ed45156b8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1018,
+/**/
1017,
/**/
1016,