@@ -2508,6 +2508,30 @@ def test_incorrect_constructor(self):
25082508 args = ("bad.py" , 1 , 2 , "abcdefg" , 1 )
25092509 self .assertRaises (TypeError , SyntaxError , "bad bad" , args )
25102510
2511+ def test_syntax_error_memory_leak (self ):
2512+ # gh-146250: memory leak with re-initialization of SyntaxError
2513+ e = SyntaxError ("msg" , ("file.py" , 1 , 2 , "txt" , 2 , 3 ))
2514+ e .__init__ ("new_msg" , ("new_file.py" , 2 , 3 , "new_txt" , 3 , 4 ))
2515+ self .assertEqual (e .msg , "new_msg" )
2516+ self .assertEqual (e .args , ("new_msg" , ("new_file.py" , 2 , 3 , "new_txt" , 3 , 4 )))
2517+ self .assertEqual (e .filename , "new_file.py" )
2518+ self .assertEqual (e .lineno , 2 )
2519+ self .assertEqual (e .offset , 3 )
2520+ self .assertEqual (e .text , "new_txt" )
2521+ self .assertEqual (e .end_lineno , 3 )
2522+ self .assertEqual (e .end_offset , 4 )
2523+
2524+ e = SyntaxError ("msg" , ("file.py" , 1 , 2 , "txt" , 2 , 3 ))
2525+ e .__init__ ("new_msg" , ("new_file.py" , 2 , 3 , "new_txt" ))
2526+ self .assertEqual (e .msg , "new_msg" )
2527+ self .assertEqual (e .args , ("new_msg" , ("new_file.py" , 2 , 3 , "new_txt" )))
2528+ self .assertEqual (e .filename , "new_file.py" )
2529+ self .assertEqual (e .lineno , 2 )
2530+ self .assertEqual (e .offset , 3 )
2531+ self .assertEqual (e .text , "new_txt" )
2532+ self .assertIsNone (e .end_lineno )
2533+ self .assertIsNone (e .end_offset )
2534+
25112535
25122536class TestInvalidExceptionMatcher (unittest .TestCase ):
25132537 def test_except_star_invalid_exception_type (self ):
0 commit comments