@@ -2519,15 +2519,17 @@ def process_word(self):
2519
2519
2520
2520
codecEnabled = False
2521
2521
2522
- @classmethod
2523
- def lookupTestDecoder (cls , name ):
2524
- if cls .codecEnabled and name == 'test_decoder' :
2525
- latin1 = codecs .lookup ('latin-1' )
2526
- return codecs .CodecInfo (
2527
- name = 'test_decoder' , encode = latin1 .encode , decode = None ,
2528
- incrementalencoder = None ,
2529
- streamreader = None , streamwriter = None ,
2530
- incrementaldecoder = cls )
2522
+
2523
+ # bpo-41919: This method is separated from StatefulIncrementalDecoder to avoid a resource leak
2524
+ # when registering codecs and cleanup functions.
2525
+ def lookupTestDecoder (name ):
2526
+ if StatefulIncrementalDecoder .codecEnabled and name == 'test_decoder' :
2527
+ latin1 = codecs .lookup ('latin-1' )
2528
+ return codecs .CodecInfo (
2529
+ name = 'test_decoder' , encode = latin1 .encode , decode = None ,
2530
+ incrementalencoder = None ,
2531
+ streamreader = None , streamwriter = None ,
2532
+ incrementaldecoder = StatefulIncrementalDecoder )
2531
2533
2532
2534
2533
2535
class StatefulIncrementalDecoderTest (unittest .TestCase ):
@@ -2579,9 +2581,8 @@ def setUp(self):
2579
2581
self .testdata = b"AAA\r \n BBB\r CCC\r \n DDD\n EEE\r \n "
2580
2582
self .normalized = b"AAA\n BBB\n CCC\n DDD\n EEE\n " .decode ("ascii" )
2581
2583
os_helper .unlink (os_helper .TESTFN )
2582
- codecs .register (StatefulIncrementalDecoder .lookupTestDecoder )
2583
- self .addCleanup (codecs .unregister ,
2584
- StatefulIncrementalDecoder .lookupTestDecoder )
2584
+ codecs .register (lookupTestDecoder )
2585
+ self .addCleanup (codecs .unregister , lookupTestDecoder )
2585
2586
2586
2587
def tearDown (self ):
2587
2588
os_helper .unlink (os_helper .TESTFN )
0 commit comments