From 50ab994ab34fcbe0046a9a998ee420be196334ba Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 13 Apr 2015 15:28:12 +0200 Subject: =?UTF-8?q?patch=207.4.696=20Problem:=20=20=20=20Not=20freeing=20m?= =?UTF-8?q?emory=20when=20encountering=20an=20error.=20Solution:=20=20=20F?= =?UTF-8?q?ree=20the=20stack=20before=20returning.=20(Eliseo=20Mart=C3=ADn?= =?UTF-8?q?ez)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/regexp_nfa.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/regexp_nfa.c') diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index e67f6380c..825f960ca 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -3156,6 +3156,7 @@ post2nfa(postfix, end, nfa_calc_size) if (stackp < stack) \ { \ st_error(postfix, end, p); \ + vim_free(stack); \ return NULL; \ } @@ -3632,10 +3633,16 @@ post2nfa(postfix, end, nfa_calc_size) e = POP(); if (stackp != stack) + { + vim_free(stack); EMSG_RET_NULL(_("E875: (NFA regexp) (While converting from postfix to NFA), too many states left on stack")); + } if (istate >= nstate) + { + vim_free(stack); EMSG_RET_NULL(_("E876: (NFA regexp) Not enough space to store the whole NFA ")); + } matchstate = &state_ptr[istate++]; /* the match state */ matchstate->c = NFA_MATCH; -- cgit v1.2.1