mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
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
52ba9a537b
commit
c76a4f8dea
@ -1,7 +1,7 @@
|
||||
/**********************************************************************
|
||||
* plpython.c - python as a procedural language for PostgreSQL
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.148 2010/07/08 19:00:11 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.149 2010/08/25 19:37:56 petere Exp $
|
||||
*
|
||||
*********************************************************************
|
||||
*/
|
||||
@ -1315,6 +1315,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? */
|
||||
@ -1539,8 +1541,11 @@ PLy_procedure_create(HeapTuple procTup, Oid tgreloid, char *key)
|
||||
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
Block a user