diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-03-19 11:09:24 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-03-19 11:09:37 -0400 |
commit | 7f857a511f84410631dea6590d4036c43170afc8 (patch) | |
tree | 0e39bebc027a5a0f211a4a9af0a88b7ef8007b68 /src/backend/regex/regexec.c | |
parent | 63817f86b57fc3d29b57787bca9d786218b7ee25 (diff) | |
download | postgresql-7f857a511f84410631dea6590d4036c43170afc8.tar.gz postgresql-7f857a511f84410631dea6590d4036c43170afc8.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.c | 1 |
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) |