• Bruce Momjian's avatar
    This patch addresses the problem mentioned in the "process crash · 37f11c30
    Bruce Momjian authored
    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
    37f11c30
plpython_schema.out 1.91 KB