mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
- Issue #5104: The socket module now raises OverflowError when 16-bit port and
protocol numbers are supplied outside the allowed 0-65536 range on bind() and getservbyport().
This commit is contained in:
parent
a528dc507c
commit
de1a8b720a
3 changed files with 63 additions and 11 deletions
|
@ -356,6 +356,9 @@ class GeneralModuleTests(unittest.TestCase):
|
|||
eq(socket.getservbyport(port, 'tcp'), service)
|
||||
if udpport is not None:
|
||||
eq(socket.getservbyport(udpport, 'udp'), service)
|
||||
# Make sure getservbyport does not accept out of range ports.
|
||||
self.assertRaises(OverflowError, socket.getservbyport, -1)
|
||||
self.assertRaises(OverflowError, socket.getservbyport, 65536)
|
||||
|
||||
def testDefaultTimeout(self):
|
||||
# Testing default timeout
|
||||
|
@ -456,15 +459,23 @@ class GeneralModuleTests(unittest.TestCase):
|
|||
|
||||
# XXX The following don't test module-level functionality...
|
||||
|
||||
def testSockName(self):
|
||||
# Testing getsockname(). Use a temporary socket to elicit an unused
|
||||
# ephemeral port that we can use later in the test.
|
||||
tempsock = socket.socket()
|
||||
tempsock.bind(("0.0.0.0", 0))
|
||||
(host, port) = tempsock.getsockname()
|
||||
tempsock.close()
|
||||
del tempsock
|
||||
def _get_unused_port(self, bind_address='0.0.0.0'):
|
||||
"""Use a temporary socket to elicit an unused ephemeral port.
|
||||
|
||||
Args:
|
||||
bind_address: Hostname or IP address to search for a port on.
|
||||
|
||||
Returns: A most likely to be unused port.
|
||||
"""
|
||||
tempsock = socket.socket()
|
||||
tempsock.bind((bind_address, 0))
|
||||
host, port = tempsock.getsockname()
|
||||
tempsock.close()
|
||||
return port
|
||||
|
||||
def testSockName(self):
|
||||
# Testing getsockname()
|
||||
port = self._get_unused_port()
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.bind(("0.0.0.0", port))
|
||||
name = sock.getsockname()
|
||||
|
@ -504,6 +515,19 @@ class GeneralModuleTests(unittest.TestCase):
|
|||
self.assertEqual(sock.proto, 0)
|
||||
sock.close()
|
||||
|
||||
def test_getsockaddrarg(self):
|
||||
host = '0.0.0.0'
|
||||
port = self._get_unused_port(bind_address=host)
|
||||
big_port = port + 65536
|
||||
neg_port = port - 65536
|
||||
sock = socket.socket()
|
||||
try:
|
||||
self.assertRaises(OverflowError, sock.bind, (host, big_port))
|
||||
self.assertRaises(OverflowError, sock.bind, (host, neg_port))
|
||||
sock.bind((host, port))
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
def test_sock_ioctl(self):
|
||||
if os.name != "nt":
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue