bpo-16865: Support arrays >=2GB in ctypes by segevfiner · Pull Request #3006 · python/cpython (original) (raw)
It was previously just: Modules/_ctypes/_ctypes.c:1416, so it used to silently truncate if sizeof(size_t) < sizeof(long)
. When sizeof(size_t) > sizeof(long)
, it raised OverflowError
when _length_
was too big. With the patch, the behavior when sizeof(size_t) < sizeof(long)
is preserved, while when it's bigger, it will use PyLong_AsLongLongAndOverflow
which allows to pass larger lengths.
I'm reluctant to add code to handle sizeof(size_t) < sizeof(long)
. Especially if CPython itself doesn't support such a platform, since it will never be tested. Even more so since it requires to write a custom variation of PyLong_As{Type}AndOverflow
to handle the smaller types, and which types should that be...