pgsql: Fix obscure segfault condition in PL/Python In PLy_output(),

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 07:53:58
Message-ID: 20091103075358.83A66753FB7@cvs.postgresql.org
Views: Raw Message | Whole Thread | 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.

Tags:
----
REL8_0_STABLE

Modified Files:
--------------
pgsql/src/pl/plpython:
plpython.c (r1.58.4.8 -> r1.58.4.9)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/plpython.c?r1=1.58.4.8&r2=1.58.4.9)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2009-11-03 08:12:46 pgsql: Fix obscure segfault condition in PL/Python In PLy_output(),
Previous Message Tom Lane 2009-11-01 22:31:02 pgsql: Dept of second thoughts: after studying index_getnext() a bit