From: Peter Eisentraut Date: Wed, 25 Aug 2010 19:37:34 +0000 (+0000) Subject: Catch null pointer returns from PyCObject_AsVoidPtr and PyCObject_FromVoidPtr X-Git-Tag: REL8_1_22~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=703cd9c31fd8f7224dd221eb1d860c4e28357bdb;p=thirdparty%2Fpostgresql.git 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 --- diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index 1a8c2ef857a..630f481083f 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.66.2.9 2010/04/30 19:16:10 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.66.2.10 2010/08/25 19:37:34 petere Exp $ * ********************************************************************* */ @@ -967,6 +967,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();