diff options
author | Oren Milman <orenmn@gmail.com> | 2017-09-25 08:09:11 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-09-25 08:09:11 (GMT) |
commit | 57c2561c8c5663aef55b00e3f29cba575ff36ccd (patch) | |
tree | 36217c977dffe90a97c1e8043dac073865010bfc /Lib | |
parent | 0d4497b9cae7942b7f731a6f99a73985c3fb4630 (diff) | |
download | cpython-57c2561c8c5663aef55b00e3f29cba575ff36ccd.zip cpython-57c2561c8c5663aef55b00e3f29cba575ff36ccd.tar.gz cpython-57c2561c8c5663aef55b00e3f29cba575ff36ccd.tar.bz2 |
bpo-31311: Fix a SystemError and a crash in ctypes._CData.__setstate__(), in case of a bad __dict__. (#3254)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ctypes/test/test_parameters.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py index 4eaa15a..e4c25fd 100644 --- a/Lib/ctypes/test/test_parameters.py +++ b/Lib/ctypes/test/test_parameters.py @@ -1,5 +1,6 @@ import unittest from ctypes.test import need_symbol +import test.support class SimpleTypesTestCase(unittest.TestCase): @@ -180,6 +181,26 @@ class SimpleTypesTestCase(unittest.TestCase): self.assertRaises(TypeError, _Pointer.from_param, 42) self.assertRaises(TypeError, _SimpleCData.from_param, 42) + @test.support.cpython_only + def test_issue31311(self): + # __setstate__ should neither raise a SystemError nor crash in case + # of a bad __dict__. + from ctypes import Structure + + class BadStruct(Structure): + @property + def __dict__(self): + pass + with self.assertRaises(TypeError): + BadStruct().__setstate__({}, b'foo') + + class WorseStruct(Structure): + @property + def __dict__(self): + 1/0 + with self.assertRaises(ZeroDivisionError): + WorseStruct().__setstate__({}, b'foo') + ################################################################ if __name__ == '__main__': |