diff --git a/src/modules/Regexp/pike_regexp.c b/src/modules/Regexp/pike_regexp.c index e07097433d747340f3f0012d3c948460c32991f0..b16fc221999aaa70fd026b5e697d2eb2aeebed29 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 28fc7756067b49639ae3cd3d60ca17e83748c3ea..714517b6c96e19be5bc1930e4de2a4d2d2aa2b25 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", "�") ]], "�")