[Python-checkins] cpython: Issue #19437: Fix ctypes, handle PyCData_GetContainer() and GetKeepedObjects()
victor.stinner
python-checkins at python.org
Wed Nov 13 13:33:32 CET 2013
http://hg.python.org/cpython/rev/13203ea0ac5b
changeset: 87082:13203ea0ac5b
user: Victor Stinner <victor.stinner at gmail.com>
date: Wed Nov 13 13:29:37 2013 +0100
summary:
Issue #19437: Fix ctypes, handle PyCData_GetContainer() and GetKeepedObjects()
failures
files:
Modules/_ctypes/_ctypes.c | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -2405,6 +2405,10 @@
return 0;
}
ob = PyCData_GetContainer(target);
+ if (ob == NULL) {
+ Py_DECREF(keep);
+ return -1;
+ }
if (ob->b_objects == NULL || !PyDict_CheckExact(ob->b_objects)) {
Py_XDECREF(ob->b_objects);
ob->b_objects = keep; /* refcount consumed */
@@ -2791,6 +2795,9 @@
/* XXX */;
value = GetKeepedObjects(src);
+ if (value == NULL)
+ return NULL;
+
Py_INCREF(value);
return value;
}
@@ -2814,6 +2821,9 @@
*(void **)ptr = src->b_ptr;
keep = GetKeepedObjects(src);
+ if (keep == NULL)
+ return NULL;
+
/*
We are assigning an array object to a field which represents
a pointer. This has the same effect as converting an array
@@ -4810,6 +4820,9 @@
return -1;
keep = GetKeepedObjects(dst);
+ if (keep == NULL)
+ return -1;
+
Py_INCREF(keep);
return KeepRef(self, 0, keep);
}
@@ -5216,9 +5229,14 @@
*/
if (CDataObject_Check(src)) {
CDataObject *obj = (CDataObject *)src;
+ CDataObject *container;
+
/* PyCData_GetContainer will initialize src.b_objects, we need
this so it can be shared */
- PyCData_GetContainer(obj);
+ container = PyCData_GetContainer(obj);
+ if (container == NULL)
+ goto failed;
+
/* But we need a dictionary! */
if (obj->b_objects == Py_None) {
Py_DECREF(Py_None);
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list