diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/_pyio.py | 4 | ||||
-rw-r--r-- | Lib/test/test_io.py | 18 |
2 files changed, 22 insertions, 0 deletions
diff --git a/Lib/_pyio.py b/Lib/_pyio.py index 83bce70..87c833c 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -747,6 +747,10 @@ class _BufferedIOMixin(BufferedIOBase): def mode(self): return self.raw.mode + def __getstate__(self): + raise TypeError("can not serialize a '{0}' object" + .format(self.__class__.__name__)) + def __repr__(self): clsname = self.__class__.__name__ try: diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 680e36d..91dd803 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -30,6 +30,7 @@ import abc import signal import errno import warnings +import pickle from itertools import cycle, count from collections import deque from test import support @@ -2566,6 +2567,23 @@ class MiscIOTest(unittest.TestCase): self._check_warn_on_dealloc_fd("r") + def test_pickling(self): + # Pickling file objects is forbidden + for kwargs in [ + {"mode": "w"}, + {"mode": "wb"}, + {"mode": "wb", "buffering": 0}, + {"mode": "r"}, + {"mode": "rb"}, + {"mode": "rb", "buffering": 0}, + {"mode": "w+"}, + {"mode": "w+b"}, + {"mode": "w+b", "buffering": 0}, + ]: + for protocol in range(pickle.HIGHEST_PROTOCOL + 1): + with self.open(support.TESTFN, **kwargs) as f: + self.assertRaises(TypeError, pickle.dumps, f, protocol) + class CMiscIOTest(MiscIOTest): io = io |