From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix edge-case resource leaks in PL/Python error reporting. |
Date: | 2025-06-01 18:55:45 |
Message-ID: | E1uLnqS-0013rt-1E@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix edge-case resource leaks in PL/Python error reporting.
PLy_elog_impl and its subroutine PLy_traceback intended to avoid
leaking any PyObject reference counts, but their coverage of the
matter was sadly incomplete. In particular, out-of-memory errors
in most of the string-construction subroutines could lead to
reference count leaks, because those calls were outside the
PG_TRY blocks responsible for dropping reference counts.
Fix by (a) adjusting the scopes of the PG_TRY blocks, and
(b) moving the responsibility for releasing the reference counts
of the traceback-stack objects to PLy_elog_impl. This requires
some additional "volatile" markers, but not too many.
In passing, fix an ancient thinko: use of the "e_module_o" PyObject
was guarded by "if (e_type_s)", where surely "if (e_module_o)"
was meant. This would only have visible consequences if the
"__name__" attribute were present but the "__module__" attribute
wasn't, which apparently never happens; but someday it might.
Rearranging the PG_TRY blocks requires indenting a fair amount
of code one more tab stop, which I'll do separately for clarity.
Author: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Discussion: https://postgr.es/m/2954090.1748723636@sss.pgh.pa.us
Backpatch-through: 13
Branch
------
REL_13_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/1c78d555315052593a216d17f9a56c5c468e7e37
Modified Files
--------------
src/pl/plpython/plpy_elog.c | 105 +++++++++++++++++++++++---------------------
1 file changed, 55 insertions(+), 50 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2025-06-01 18:59:09 | pgsql: Add commit 4672b6223 to .git-blame-ignore-revs. |
Previous Message | Etsuro Fujita | 2025-06-01 08:34:49 | pgsql: postgres_fdw: Inherit the local transaction's access/deferrable |