pgsql: Fix ancient memory leak in contrib/auto_explain. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix ancient memory leak in contrib/auto_explain.
Date
Msg-id E1l70jw-0000pe-JF@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix ancient memory leak in contrib/auto_explain.

The ExecutorEnd hook is invoked in a context that could be quite
long-lived, not the executor's own per-query context as I think
we were sort of assuming.  Thus, any cruft generated while producing
the EXPLAIN output could accumulate over multiple queries.  This can
result in spectacular leakage if log_nested_statements is on, and
even without that I'm surprised nobody complained before.

To fix, just switch into the executor's context so that anything we
allocate will be released when standard_ExecutorEnd frees the executor
state.  We might as well nuke the code's retail pfree of the explain
output string, too; that's laughably inadequate to the need.

Japin Li, per report from Jeff Janes.  This bug is old, so
back-patch to all supported branches.

Discussion: https://postgr.es/m/CAMkU=1wCVtbeRn0s9gt12KwQ7PLXovbpM8eg25SYocKW3BT4hg@mail.gmail.com

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/608cf2bfd9ec33e741ba6a1c07c78c7e8f1cb171

Modified Files
--------------
contrib/auto_explain/auto_explain.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: Improve confusing variable names
Next
From: Tom Lane
Date:
Subject: pgsql: Remove extra increment of plpgsql's statement counter for FOR lo