@@ -244,6 +244,56 @@ 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 = GenericAlias (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 = GenericAlias (list , (params ,))
281+ repr_str = repr (alias )
282+ self .assertTrue (repr_str .startswith ("list[[" ), repr_str )
283+
284+ def test_evil_repr3 (self ):
285+ # gh-143823
286+ lst = []
287+ class X :
288+ def __repr__ (self ):
289+ lst .clear ()
290+ return "x"
291+
292+ lst += [X (), 1 ]
293+ ga = GenericAlias (int , lst )
294+ with self .assertRaises (IndexError ):
295+ repr (ga )
296+
247297 def test_exposed_type (self ):
248298 import types
249299 a = types .GenericAlias (list , int )
0 commit comments