@@ -244,6 +244,43 @@ class MyGeneric:
244244 self .assertEndsWith (repr (MyGeneric [[]]), 'MyGeneric[[]]' )
245245 self .assertEndsWith (repr (MyGeneric [[int , str ]]), 'MyGeneric[[int, str]]' )
246246
247+ def test_evil_repr1 (self ):
248+ # gh-143635
249+ class Zap :
250+ def __init__ (self , container ):
251+ self .container = container
252+ def __getattr__ (self , name ):
253+ if name == "__origin__" :
254+ self .container .clear ()
255+ return None
256+ if name == "__args__" :
257+ return ()
258+ raise AttributeError
259+
260+ params = []
261+ params .append (Zap (params ))
262+ alias = type (list [int ])(list , (params ,))
263+ repr_str = repr (alias )
264+ self .assertTrue (repr_str .startswith ("list[[" ), repr_str )
265+
266+ def test_evil_repr2 (self ):
267+ class Zap :
268+ def __init__ (self , container ):
269+ self .container = container
270+ def __getattr__ (self , name ):
271+ if name == "__qualname__" :
272+ self .container .clear ()
273+ return "abcd"
274+ if name == "__module__" :
275+ return None
276+ raise AttributeError
277+
278+ params = []
279+ params .append (Zap (params ))
280+ alias = type (list [int ])(list , (params ,))
281+ repr_str = repr (alias )
282+ self .assertTrue (repr_str .startswith ("list[[" ), repr_str )
283+
247284 def test_exposed_type (self ):
248285 import types
249286 a = types .GenericAlias (list , int )
0 commit comments