pgsql: This patch addresses the problem mentioned in the "process crash

From: momjian(at)svr1(dot)postgresql(dot)org (Bruce Momjian)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: This patch addresses the problem mentioned in the "process crash
Date: 2005-07-10 04:56:55
Message-ID: 20050710045655.A66CA52828@svr1.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
This patch addresses the problem mentioned in the "process crash
when a plpython function returns unicode" thread:

http://archives.postgresql.org/pgsql-bugs/2005-06/msg00105.php

In several places PL/Python was calling PyObject_Str() and then
PyString_AsString() without checking if the former had returned
NULL to indicate an error. PyString_AsString() doesn't expect a
NULL argument, so passing one causes a segmentation fault. This
patch adds checks for NULL and raises errors via PLy_elog(), which
prints details of the underlying Python exception. The patch also
adds regression tests for these checks. All tests pass on my
Solaris 9 box running HEAD and Python 2.4.1.

In one place the patch doesn't call PLy_elog() because that could
cause infinite recursion; see the comment I added. I'm not sure
how to test that particular case or whether it's even possible to
get an error there: the value that the code should check is the
Python exception type, so I wonder if a NULL value "shouldn't
happen." This patch converts NULL to "Unknown Exception" but I
wonder if an Assert() would be appropriate.

The patch is against HEAD but the same changes should be applied
to earlier versions because they have the same problem. The patch
might not apply cleanly against earlier versions -- will the committer
take care of little differences or should I submit different versions
of the patch?

Michael Fuhr

Modified Files:
--------------
pgsql/src/pl/plpython:
plpython.c (r1.64 -> r1.65)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/plpython.c.diff?r1=1.64&r2=1.65)
pgsql/src/pl/plpython/expected:
plpython_error.out (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/expected/plpython_error.out.diff?r1=1.2&r2=1.3)
plpython_function.out (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/expected/plpython_function.out.diff?r1=1.2&r2=1.3)
plpython_schema.out (r1.1 -> r1.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/expected/plpython_schema.out.diff?r1=1.1&r2=1.2)
pgsql/src/pl/plpython/sql:
plpython_error.sql (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/sql/plpython_error.sql.diff?r1=1.2&r2=1.3)
plpython_function.sql (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/sql/plpython_function.sql.diff?r1=1.2&r2=1.3)
plpython_schema.sql (r1.1 -> r1.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/sql/plpython_schema.sql.diff?r1=1.1&r2=1.2)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2005-07-10 05:06:42 pgsql: Update.
Previous Message Bruce Momjian 2005-07-10 04:54:33 pgsql: I made the patch that implements regexp_replace again.