summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2007-12-05 09:33:00 (GMT)
committerChristian Heimes <christian@cheimes.de>2007-12-05 09:33:00 (GMT)
commitdbb7b9da61450142e034c4da2eb9ca0f0bc13eb0 (patch)
tree0b30d2c9ced4f7fcb221555bff4c145efdd340ec
parent50ab942741a94cc31c6a5036e6b230dc9e1d5689 (diff)
downloadcpython-dbb7b9da61450142e034c4da2eb9ca0f0bc13eb0.zip
cpython-dbb7b9da61450142e034c4da2eb9ca0f0bc13eb0.tar.gz
cpython-dbb7b9da61450142e034c4da2eb9ca0f0bc13eb0.tar.bz2
Fixed problem with missing PyInt_CheckExact() macro in _ctypes.c
-rw-r--r--Modules/_ctypes/_ctypes.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 00643ac..54e7963 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -954,8 +954,8 @@ ArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
StgDictObject *itemdict;
PyObject *proto;
PyObject *typedict;
- int length;
-
+ long length;
+ int overflow;
Py_ssize_t itemsize, itemalign;
typedict = PyTuple_GetItem(args, 2);
@@ -963,13 +963,18 @@ ArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
proto = PyDict_GetItemString(typedict, "_length_"); /* Borrowed ref */
- if (!proto || !PyInt_CheckExact(proto)) {
+ if (!proto || !PyLong_Check(proto)) {
PyErr_SetString(PyExc_AttributeError,
"class must define a '_length_' attribute, "
"which must be a positive integer");
return NULL;
}
- length = PyLong_AS_LONG(proto);
+ length = PyLong_AsLongAndOverflow(proto, &overflow);
+ if (overflow) {
+ PyErr_SetString(PyExc_OverflowError,
+ "The '_length_' attribute is too large");
+ return NULL;
+ }
proto = PyDict_GetItemString(typedict, "_type_"); /* Borrowed ref */
if (!proto) {