import unittest
+from test.support import bigmemtest, _2G
+import sys
from ctypes import *
from ctypes.test import need_symbol
_type_ = c_int
_length_ = 1.87
+ @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform')
+ @bigmemtest(size=_2G, memuse=1, dry_run=False)
+ def test_large_array(self, size):
+ c_char * size
+
if __name__ == '__main__':
unittest.main()
StgDictObject *stgdict;
StgDictObject *itemdict;
PyObject *length_attr, *type_attr;
- long length;
- int overflow;
+ Py_ssize_t length;
Py_ssize_t itemsize, itemalign;
/* create the new instance (which is a class,
Py_XDECREF(length_attr);
goto error;
}
- length = PyLong_AsLongAndOverflow(length_attr, &overflow);
- if (overflow) {
- PyErr_SetString(PyExc_OverflowError,
- "The '_length_' attribute is too large");
- Py_DECREF(length_attr);
+ length = PyLong_AsSsize_t(length_attr);
+ Py_DECREF(length_attr);
+ if (length == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
+ PyErr_SetString(PyExc_OverflowError,
+ "The '_length_' attribute is too large");
+ }
goto error;
}
- Py_DECREF(length_attr);
type_attr = PyObject_GetAttrString((PyObject *)result, "_type_");
if (!type_attr) {