[Python-3000-checkins] r59344 - python/branches/py3k/Modules/_ctypes/_ctypes.c
christian.heimes
python-3000-checkins at python.org
Wed Dec 5 10:33:01 CET 2007
Author: christian.heimes
Date: Wed Dec 5 10:33:00 2007
New Revision: 59344
Modified:
python/branches/py3k/Modules/_ctypes/_ctypes.c
Log:
Fixed problem with missing PyInt_CheckExact() macro in _ctypes.c
Modified: python/branches/py3k/Modules/_ctypes/_ctypes.c
==============================================================================
--- python/branches/py3k/Modules/_ctypes/_ctypes.c (original)
+++ python/branches/py3k/Modules/_ctypes/_ctypes.c Wed Dec 5 10:33:00 2007
@@ -954,8 +954,8 @@
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 @@
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) {
More information about the Python-3000-checkins
mailing list