Skip to content

Commit 3a55a39

Browse files
committed
Add error checking to __prepare__ call
1 parent efc9d38 commit 3a55a39

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_types.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_bad___prepare__
12
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_derivation
23
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_override_callable
34
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_override_function

graalpython/lib-graalpython/classes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ def prepare_class(name, bases=(), kwds=None):
103103
meta = _calculate_meta(meta, bases)
104104
if hasattr(meta, '__prepare__'):
105105
ns = meta.__prepare__(name, bases, **kwds)
106+
if not hasattr(ns, '__getitem__'):
107+
raise TypeError("%s.__prepare__() must return a mapping, not %s" %
108+
(meta.__name__ if isinstance(meta, type) else '<metaclass>', type(ns).__name__))
106109
else:
107110
ns = {}
108111
return meta, ns, kwds

0 commit comments

Comments
 (0)