import unittest
+import sys
from ctypes import *
class StructFieldsTestCase(unittest.TestCase):
'ctypes state is not initialized'):
class Subclass(BrokenStructure): ...
+ def test_max_field_size_gh126937(self):
+ # Classes for big structs should be created successfully.
+ # (But they most likely can't be instantiated.)
+ # The size must fit in Py_ssize_t.
+
+ class X(Structure):
+ _fields_ = [('char', c_char),]
+ max_field_size = sys.maxsize
+
+ class Y(Structure):
+ _fields_ = [('largeField', X * max_field_size)]
+ class Z(Structure):
+ _fields_ = [('largeField', c_char * max_field_size)]
+
+ with self.assertRaises(OverflowError):
+ class TooBig(Structure):
+ _fields_ = [('largeField', X * (max_field_size + 1))]
+ with self.assertRaises(OverflowError):
+ class TooBig(Structure):
+ _fields_ = [('largeField', c_char * (max_field_size + 1))]
+
# __set__ and __get__ should raise a TypeError in case their self
# argument is not a ctype instance.
def test___set__(self):