Skip to content

Commit 5996870

Browse files
committed
Add super().__init__ calls and early returns to limit recursion.
1 parent 7a67476 commit 5996870

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

Lib/test/test_ctypes/test_c_simple_type_meta.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,16 @@ class Sub(CtBase):
8787
self.assertTrue(issubclass(POINTER(Sub), Sub))
8888

8989
def test_creating_pointer_in_dunder_init_1(self):
90-
# Test for modern metaclass initialization that does not
91-
# require recursion avoidance.
92-
9390
class ct_meta(type):
9491
def __init__(self, name, bases, namespace):
92+
super().__init__(name, bases, namespace)
93+
94+
# Avoid recursion.
95+
# (See test_creating_pointer_in_dunder_new_1)
96+
if bases == (c_void_p,):
97+
return
98+
if issubclass(self, PtrBase):
99+
return
95100
if bases == (object,):
96101
ptr_bases = (self, PtrBase)
97102
else:
@@ -120,10 +125,14 @@ class Sub2(Sub):
120125
self.assertTrue(issubclass(POINTER(Sub), POINTER(CtBase)))
121126

122127
def test_creating_pointer_in_dunder_init_2(self):
123-
# A simpler variant of the above.
124-
125128
class ct_meta(type):
126129
def __init__(self, name, bases, namespace):
130+
super().__init__(name, bases, namespace)
131+
132+
# Avoid recursion.
133+
# (See test_creating_pointer_in_dunder_new_2)
134+
if isinstance(self, p_meta):
135+
return self
127136
p = p_meta(f"POINTER({self.__name__})", (self, c_void_p), {})
128137
ctypes._pointer_type_cache[self] = p
129138

0 commit comments

Comments
 (0)