From 4d8c7b0d83d2370c3b1ef87b1a40044d056b4ee3 Mon Sep 17 00:00:00 2001 From: Martin Nilsson <nilsson@fastmail.com> Date: Mon, 24 Jul 2017 04:29:54 +0200 Subject: [PATCH] Do not leak on regexp compilation error. --- src/modules/Regexp/pike_regexp.c | 5 ++++- src/modules/Regexp/testsuite.in | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/modules/Regexp/pike_regexp.c b/src/modules/Regexp/pike_regexp.c index e07097433d..b16fc22199 100644 --- a/src/modules/Regexp/pike_regexp.c +++ b/src/modules/Regexp/pike_regexp.c @@ -257,11 +257,13 @@ regexp *pike_regcomp(char *exp,int excompat) register ptrdiff_t len; int flags; short *exp2,*dest,c; + ONERROR oerr; if (exp == (char *)NULL) FAIL("NULL argument"); exp2=xalloc( (strlen(exp)+1) * sizeof(short) ); + SET_ONERROR(oerr, free, exp2); for ( scan=exp,dest=exp2;( c= UCHARAT(scan++)); ) { switch (c) { case '(': @@ -361,7 +363,8 @@ regexp *pike_regcomp(char *exp,int excompat) r->regmlen = len; } } - free(exp2); + + CALL_AND_UNSET_ONERROR(oerr); return (r); } diff --git a/src/modules/Regexp/testsuite.in b/src/modules/Regexp/testsuite.in index 28fc775606..714517b6c9 100644 --- a/src/modules/Regexp/testsuite.in +++ b/src/modules/Regexp/testsuite.in @@ -38,6 +38,7 @@ test_equal([[Regexp("c|a")->match(({ "a", "b", "c" }))]],({ "a", "c" })) dnl Regexp->split test_equal([[Regexp("^(a*)[^a]*$")->split("aaabbb")]],({"aaa"})) +test_eval_error(Regexp("(a)"*40)->split("a"*50)) dnl Regexp->replace test_equal([[ Regexp(".*")->replace("abrakadabra", "�") ]], "�") -- GitLab