mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
Issue #20404: reject non-text encodings early in TextIOWrapper.
This commit is contained in:
parent
2658bad090
commit
2fc8f773e1
5 changed files with 134 additions and 39 deletions
|
@ -1955,6 +1955,15 @@ class TextIOWrapperTest(unittest.TestCase):
|
|||
self.assertRaises(TypeError, t.__init__, b, newline=42)
|
||||
self.assertRaises(ValueError, t.__init__, b, newline='xyzzy')
|
||||
|
||||
def test_non_text_encoding_codecs_are_rejected(self):
|
||||
# Ensure the constructor complains if passed a codec that isn't
|
||||
# marked as a text encoding
|
||||
# http://bugs.python.org/issue20404
|
||||
r = self.BytesIO()
|
||||
b = self.BufferedWriter(r)
|
||||
with self.assertRaisesRegex(LookupError, "is not a text encoding"):
|
||||
self.TextIOWrapper(b, encoding="hex_codec")
|
||||
|
||||
def test_detach(self):
|
||||
r = self.BytesIO()
|
||||
b = self.BufferedWriter(r)
|
||||
|
@ -2607,15 +2616,22 @@ class TextIOWrapperTest(unittest.TestCase):
|
|||
|
||||
def test_illegal_decoder(self):
|
||||
# Issue #17106
|
||||
# Bypass the early encoding check added in issue 20404
|
||||
def _make_illegal_wrapper():
|
||||
quopri = codecs.lookup("quopri_codec")
|
||||
quopri._is_text_encoding = True
|
||||
try:
|
||||
t = self.TextIOWrapper(self.BytesIO(b'aaaaaa'),
|
||||
newline='\n', encoding="quopri_codec")
|
||||
finally:
|
||||
quopri._is_text_encoding = False
|
||||
return t
|
||||
# Crash when decoder returns non-string
|
||||
t = self.TextIOWrapper(self.BytesIO(b'aaaaaa'), newline='\n',
|
||||
encoding='quopri_codec')
|
||||
t = _make_illegal_wrapper()
|
||||
self.assertRaises(TypeError, t.read, 1)
|
||||
t = self.TextIOWrapper(self.BytesIO(b'aaaaaa'), newline='\n',
|
||||
encoding='quopri_codec')
|
||||
t = _make_illegal_wrapper()
|
||||
self.assertRaises(TypeError, t.readline)
|
||||
t = self.TextIOWrapper(self.BytesIO(b'aaaaaa'), newline='\n',
|
||||
encoding='quopri_codec')
|
||||
t = _make_illegal_wrapper()
|
||||
self.assertRaises(TypeError, t.read)
|
||||
|
||||
|
||||
|
@ -3053,6 +3069,7 @@ class MiscIOTest(unittest.TestCase):
|
|||
|
||||
class CMiscIOTest(MiscIOTest):
|
||||
io = io
|
||||
shutdown_error = "RuntimeError: could not find io module state"
|
||||
|
||||
def test_readinto_buffer_overflow(self):
|
||||
# Issue #18025
|
||||
|
@ -3065,6 +3082,7 @@ class CMiscIOTest(MiscIOTest):
|
|||
|
||||
class PyMiscIOTest(MiscIOTest):
|
||||
io = pyio
|
||||
shutdown_error = "LookupError: unknown encoding: ascii"
|
||||
|
||||
|
||||
@unittest.skipIf(os.name == 'nt', 'POSIX signals required for this test.')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue