]> granicus.if.org Git - postgresql/commitdiff
Fix memory leak during regular expression execution.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 19 Mar 2014 15:09:24 +0000 (11:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 19 Mar 2014 15:09:24 +0000 (11:09 -0400)
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.

src/backend/regex/regexec.c

index 0edb83c1099f9fb99f38e8c1e7df6761a1d1b693..2e976627f52c60ce7ade895192e3159519e445c7 100644 (file)
@@ -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)