aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2010-08-25 19:37:56 +0000
committerPeter Eisentraut <peter_e@gmx.net>2010-08-25 19:37:56 +0000
commitc76a4f8dea8f8f349ac3de635179cb4f03be658f (patch)
treef2ad9156d276d5485ad494eb7ad2880441959eb1 /src
parent52ba9a537bf60381aa50202e3fd9f1d473422e8f (diff)
downloadpostgresql-c76a4f8dea8f8f349ac3de635179cb4f03be658f.tar.gz
postgresql-c76a4f8dea8f8f349ac3de635179cb4f03be658f.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/pl/plpython/plpython.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index e1a976ec6e5..0c4d0928e21 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -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();