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:]) s[7:])
return s return s
def __getstate__(self):
raise TypeError("Cannot serialize socket object")
def dup(self): def dup(self):
"""dup() -> socket object """dup() -> socket object

View File

@ -18,6 +18,7 @@ import contextlib
from weakref import proxy from weakref import proxy
import signal import signal
import math import math
import pickle
try: try:
import fcntl import fcntl
except ImportError: except ImportError:
@ -764,6 +765,12 @@ class GeneralModuleTests(unittest.TestCase):
fp.close() fp.close()
self.assertEqual(repr(fp), "<_io.BufferedReader name=-1>") 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.') @unittest.skipUnless(thread, 'Threading required for this test.')
class BasicTCPTest(SocketConnectedTest): class BasicTCPTest(SocketConnectedTest):

View File

@ -83,6 +83,8 @@ Library
- Issue #4391: Use proper gettext plural forms in optparse. - 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 - Issue #11563: Connection:close header is sent by requests using URLOpener
class which helps in closing of sockets after connection is over. Patch class which helps in closing of sockets after connection is over. Patch
contributions by Jeff McNeil and Nadeem Vawda. contributions by Jeff McNeil and Nadeem Vawda.