diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-07-13 06:09:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-13 06:09:27 -0700 |
commit | 57c984fab69b862563899d2c11da7d27201f4152 (patch) | |
tree | f5b538659588acbdb02503e62190142ff036cb99 /Lib | |
parent | bpo-41228: Fix /a/are/ in monthcalendar() descripton (GH-21372) (diff) | |
download | cpython-57c984fab69b862563899d2c11da7d27201f4152.tar.gz cpython-57c984fab69b862563899d2c11da7d27201f4152.tar.bz2 cpython-57c984fab69b862563899d2c11da7d27201f4152.zip |
bpo-41288: Fix a crash in unpickling invalid NEWOBJ_EX. (GH-21458)
Automerge-Triggered-By: @tiran
(cherry picked from commit 4f309abf55f0e6f8950ac13d6ec83c22b8d47bf8)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/pickletester.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index fe5a50bb42f..94d42c4f971 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -1172,6 +1172,24 @@ class AbstractUnpickleTests(unittest.TestCase): self.assertIs(type(unpickled), collections.UserDict) self.assertEqual(unpickled, collections.UserDict({1: 2})) + def test_bad_reduce(self): + self.assertEqual(self.loads(b'cbuiltins\nint\n)R.'), 0) + self.check_unpickling_error(TypeError, b'N)R.') + self.check_unpickling_error(TypeError, b'cbuiltins\nint\nNR.') + + def test_bad_newobj(self): + error = (pickle.UnpicklingError, TypeError) + self.assertEqual(self.loads(b'cbuiltins\nint\n)\x81.'), 0) + self.check_unpickling_error(error, b'cbuiltins\nlen\n)\x81.') + self.check_unpickling_error(error, b'cbuiltins\nint\nN\x81.') + + def test_bad_newobj_ex(self): + error = (pickle.UnpicklingError, TypeError) + self.assertEqual(self.loads(b'cbuiltins\nint\n)}\x92.'), 0) + self.check_unpickling_error(error, b'cbuiltins\nlen\n)}\x92.') + self.check_unpickling_error(error, b'cbuiltins\nint\nN}\x92.') + self.check_unpickling_error(error, b'cbuiltins\nint\n)N\x92.') + def test_bad_stack(self): badpickles = [ b'.', # STOP |