mirror of https://github.com/postgres/postgres
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
This commit is contained in:
parent
e8b4a23b12
commit
e4b08587e3
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue