From: | petere(at)postgresql(dot)org (Peter Eisentraut) |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix obscure segfault condition in PL/Python In PLy_output(), |
Date: | 2009-11-03 09:35:18 |
Message-ID: | 20091103093518.A45CA753FB7@cvs.postgresql.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Log Message:
-----------
Fix obscure segfault condition in PL/Python
In PLy_output(), when the elog() call in the TRY branch throws an exception
(this can happen when a statement timeout kicks in, for example), the
PyErr_SetString() call in the CATCH branch can cause a segfault, because the
Py_XDECREF(so) call before it releases memory that is still used by the sv
variable that PyErr_SetString() uses as argument, because sv points into
memory owned by so.
Backpatched back to 8.0, where this code was introduced.
I also threw in a couple of volatile declarations for variables that are used
before and after the TRY. I don't think they caused the crash that I
observed, but they could become issues.
Modified Files:
--------------
pgsql/src/pl/plpython:
plpython.c (r1.130 -> r1.131)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/plpython.c?r1=1.130&r2=1.131)
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2009-11-03 10:34:47 | pgsql: In psql, show view definition only with \d+, not with \d The |
Previous Message | Peter Eisentraut | 2009-11-03 08:59:16 | pgsql: Fix obscure segfault condition in PL/Python In PLy_output(), |