aboutsummaryrefslogtreecommitdiff
path: root/src/backend/regex/regexec.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-03-19 11:09:24 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-03-19 11:09:24 -0400
commitea8c7e9054abf23fa3de2f8e4414f60ac8a8b620 (patch)
treed4a3535ef4405b656aac87e9726ca867fc52667a /src/backend/regex/regexec.c
parentfb1d92a9fa0226c435daf16d08e5d05d6986fc54 (diff)
downloadpostgresql-ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620.tar.gz
postgresql-ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620.zip
Fix memory leak during regular expression execution.
For a regex containing backrefs, pg_regexec() might fail to free all the sub-DFAs that were created during execution, resulting in a permanent (session lifespan) memory leak. Problem was introduced by me in commit 587359479acbbdc95c8e37da40707e37097423f5. Per report from Sandro Santilli; diagnosis by Greg Stark.
Diffstat (limited to 'src/backend/regex/regexec.c')
-rw-r--r--src/backend/regex/regexec.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c
index 0edb83c1099..2e976627f52 100644
--- a/src/backend/regex/regexec.c
+++ b/src/backend/regex/regexec.c
@@ -259,6 +259,7 @@ pg_regexec(regex_t *re,
/* clean up */
if (v->pmatch != pmatch && v->pmatch != mat)
FREE(v->pmatch);
+ n = (size_t) v->g->ntree;
for (i = 0; i < n; i++)
{
if (v->subdfas[i] != NULL)