import unittest
+import sys
from ctypes import Structure, Union, sizeof, c_char, c_int
from ._support import (CField, Py_TPFLAGS_DISALLOW_INSTANTIATION,
Py_TPFLAGS_IMMUTABLETYPE)
'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):