bpo-41919: Avoid resource leak in test_io (GH-22973)

Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
This commit is contained in:
Hai Shi 2020-10-26 02:38:33 +08:00 committed by GitHub
parent df8d4c83a6
commit 14cdc215aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 12 deletions

View File

@ -2519,15 +2519,17 @@ class StatefulIncrementalDecoder(codecs.IncrementalDecoder):
codecEnabled = False codecEnabled = False
@classmethod
def lookupTestDecoder(cls, name): # bpo-41919: This method is separated from StatefulIncrementalDecoder to avoid a resource leak
if cls.codecEnabled and name == 'test_decoder': # when registering codecs and cleanup functions.
def lookupTestDecoder(name):
if StatefulIncrementalDecoder.codecEnabled and name == 'test_decoder':
latin1 = codecs.lookup('latin-1') latin1 = codecs.lookup('latin-1')
return codecs.CodecInfo( return codecs.CodecInfo(
name='test_decoder', encode=latin1.encode, decode=None, name='test_decoder', encode=latin1.encode, decode=None,
incrementalencoder=None, incrementalencoder=None,
streamreader=None, streamwriter=None, streamreader=None, streamwriter=None,
incrementaldecoder=cls) incrementaldecoder=StatefulIncrementalDecoder)
class StatefulIncrementalDecoderTest(unittest.TestCase): class StatefulIncrementalDecoderTest(unittest.TestCase):
@ -2579,9 +2581,8 @@ class TextIOWrapperTest(unittest.TestCase):
self.testdata = b"AAA\r\nBBB\rCCC\r\nDDD\nEEE\r\n" self.testdata = b"AAA\r\nBBB\rCCC\r\nDDD\nEEE\r\n"
self.normalized = b"AAA\nBBB\nCCC\nDDD\nEEE\n".decode("ascii") self.normalized = b"AAA\nBBB\nCCC\nDDD\nEEE\n".decode("ascii")
os_helper.unlink(os_helper.TESTFN) os_helper.unlink(os_helper.TESTFN)
codecs.register(StatefulIncrementalDecoder.lookupTestDecoder) codecs.register(lookupTestDecoder)
self.addCleanup(codecs.unregister, self.addCleanup(codecs.unregister, lookupTestDecoder)
StatefulIncrementalDecoder.lookupTestDecoder)
def tearDown(self): def tearDown(self):
os_helper.unlink(os_helper.TESTFN) os_helper.unlink(os_helper.TESTFN)