diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-05-25 21:18:34 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-05-25 21:18:34 +0200 |
commit | aae4883e01d70d6075e250f4116b6888aca93594 (patch) | |
tree | f07423e3b554ec565c4d18979dda8fa0d8115c62 | |
parent | 4b41706477bccb6f0b3f5154f09af30e9fc4f452 (diff) | |
download | vim-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.c | 18 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |