summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_io.py
diff options
context:
space:
mode:
authorOren Milman <orenmn@gmail.com>2017-08-29 08:58:27 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2017-08-29 08:58:27 (GMT)
commitba7d7365215d791025d1efd25393c91404f2cfc8 (patch)
tree8ba0a3b1944172f450f0d76f588bb106dd50e174 /Lib/test/test_io.py
parente9d978fd1bc122395efc91a82b16b2c4b968441d (diff)
downloadcpython-ba7d7365215d791025d1efd25393c91404f2cfc8.zip
cpython-ba7d7365215d791025d1efd25393c91404f2cfc8.tar.gz
cpython-ba7d7365215d791025d1efd25393c91404f2cfc8.tar.bz2
bpo-31243: Fixed PyArg_ParseTuple failure checks. (#3171)
Diffstat (limited to 'Lib/test/test_io.py')
-rw-r--r--Lib/test/test_io.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index ba95c14..48270c8 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3253,6 +3253,26 @@ class TextIOWrapperTest(unittest.TestCase):
t = _make_illegal_wrapper()
self.assertRaises(TypeError, t.read)
+ # Issue 31243: calling read() while the return value of decoder's
+ # getstate() is invalid should neither crash the interpreter nor
+ # raise a SystemError.
+ def _make_very_illegal_wrapper(getstate_ret_val):
+ class BadDecoder:
+ def getstate(self):
+ return getstate_ret_val
+ def _get_bad_decoder(dummy):
+ return BadDecoder()
+ quopri = codecs.lookup("quopri")
+ with support.swap_attr(quopri, 'incrementaldecoder',
+ _get_bad_decoder):
+ return _make_illegal_wrapper()
+ t = _make_very_illegal_wrapper(42)
+ self.assertRaises(TypeError, t.read, 42)
+ t = _make_very_illegal_wrapper(())
+ self.assertRaises(TypeError, t.read, 42)
+ t = _make_very_illegal_wrapper((1, 2))
+ self.assertRaises(TypeError, t.read, 42)
+
def _check_create_at_shutdown(self, **kwargs):
# Issue #20037: creating a TextIOWrapper at shutdown
# shouldn't crash the interpreter.