postgres.git / summary / log / commit / refs

commit    e4b08587e31d7b829e0343a6546c8d31e5aedde5
Author:   Peter Eisentraut <peter_e@gmx.net>
Date:     Wed Aug 25 19:37:30 2010 +0000

    Catch null pointer returns from PyCObject_AsVoidPtr and PyCObject_FromVoidPtr
    
    This is reproducibly possible in Python 2.7 if the user turned
    PendingDeprecationWarning into an error, but it's theoretically also possible
    in earlier versions in case of exceptional conditions.
    
    backpatched to 8.0


src/pl/plpython/plpython.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index 20ec1f8047b..e75c8c38071 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -29,7 +29,7 @@ * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.58.4.11 2010/04/30 19:16:19 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.58.4.12 2010/08/25 19:37:30 petere Exp $ * ********************************************************************* */ @@ -966,6 +966,8 @@ PLy_procedure_get(FunctionCallInfo fcinfo, Oid tgreloid) elog(FATAL, "expected a PyCObject, didn't get one"); proc = PyCObject_AsVoidPtr(plproc); + if (!proc) + PLy_elog(ERROR, "PyCObject_AsVoidPtr() failed"); if (proc->me != plproc) elog(FATAL, "proc->me != plproc"); /* did we find an up-to-date cache entry? */ @@ -1135,8 +1137,11 @@ PLy_procedure_create(FunctionCallInfo fcinfo, Oid tgreloid, PLy_procedure_compile(proc, procSource); pfree(procSource); + procSource = NULL; proc->me = PyCObject_FromVoidPtr(proc, NULL); + if (!proc->me) + PLy_elog(ERROR, "PyCObject_FromVoidPtr() failed"); PyDict_SetItemString(PLy_procedure_cache, key, proc->me); } PG_CATCH(); [parent: e8b4a23b12f9]