summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2010-08-25 19:37:52 +0000
committerPeter Eisentraut <peter_e@gmx.net>2010-08-25 19:37:52 +0000
commit7bc59f7cec26e16ee087bb0a9ab39c70af2f59d7 (patch)
tree2e7e850a5c0df0f456ea1db422579509801f0f0d /src
parenta60d2000920de45e6c2c6055ea7f900645402616 (diff)
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..e7e5ded1200 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.148.2.1 2010/08/25 19:37:52 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();