Issue #11127: Raise a TypeError when trying to pickle a socket object.

This commit is contained in:
Antoine Pitrou 2011-03-20 23:56:36 +01:00
parent b938bcd211
commit 6d58d64919
3 changed files with 12 additions and 0 deletions

View File

@ -112,6 +112,9 @@ class socket(_socket.socket):
s[7:])
return s
def __getstate__(self):
raise TypeError("Cannot serialize socket object")
def dup(self):
"""dup() -> socket object

View File

@ -18,6 +18,7 @@ import contextlib
from weakref import proxy
import signal
import math
import pickle
try:
import fcntl
except ImportError:
@ -764,6 +765,12 @@ class GeneralModuleTests(unittest.TestCase):
fp.close()
self.assertEqual(repr(fp), "<_io.BufferedReader name=-1>")
def test_pickle(self):
sock = socket.socket()
with sock:
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
self.assertRaises(TypeError, pickle.dumps, sock, protocol)
@unittest.skipUnless(thread, 'Threading required for this test.')
class BasicTCPTest(SocketConnectedTest):

View File

@ -83,6 +83,8 @@ Library
- Issue #4391: Use proper gettext plural forms in optparse.
- Issue #11127: Raise a TypeError when trying to pickle a socket object.
- Issue #11563: Connection:close header is sent by requests using URLOpener
class which helps in closing of sockets after connection is over. Patch
contributions by Jeff McNeil and Nadeem Vawda.