mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #15989: Fix several occurrences of integer overflow
when result of PyLong_AsLong() narrowed to int without checks. This is a backport of changesets 13e2e44db99d and 525407d89277.
This commit is contained in:
parent
ff12fae80e
commit
441d30fac7
16 changed files with 129 additions and 20 deletions
|
@ -7,6 +7,7 @@ import errno
|
|||
import io
|
||||
import socket
|
||||
import select
|
||||
import _testcapi
|
||||
import time
|
||||
import traceback
|
||||
import queue
|
||||
|
@ -850,11 +851,17 @@ class GeneralModuleTests(unittest.TestCase):
|
|||
self.assertRaises(ValueError, fp.writable)
|
||||
self.assertRaises(ValueError, fp.seekable)
|
||||
|
||||
def testListenBacklog0(self):
|
||||
def test_listen_backlog(self):
|
||||
for backlog in 0, -1:
|
||||
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
srv.bind((HOST, 0))
|
||||
srv.listen(backlog)
|
||||
srv.close()
|
||||
|
||||
# Issue 15989
|
||||
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
srv.bind((HOST, 0))
|
||||
# backlog = 0
|
||||
srv.listen(0)
|
||||
self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
|
||||
srv.close()
|
||||
|
||||
@unittest.skipUnless(SUPPORTS_IPV6, 'IPv6 required for this test.')
|
||||
|
@ -954,6 +961,11 @@ class BasicTCPTest(SocketConnectedTest):
|
|||
|
||||
def _testShutdown(self):
|
||||
self.serv_conn.send(MSG)
|
||||
# Issue 15989
|
||||
self.assertRaises(OverflowError, self.serv_conn.shutdown,
|
||||
_testcapi.INT_MAX + 1)
|
||||
self.assertRaises(OverflowError, self.serv_conn.shutdown,
|
||||
2 + (_testcapi.UINT_MAX + 1))
|
||||
self.serv_conn.shutdown(2)
|
||||
|
||||
def testDetach(self):
|
||||
|
@ -1067,7 +1079,10 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest):
|
|||
|
||||
def testSetBlocking(self):
|
||||
# Testing whether set blocking works
|
||||
self.serv.setblocking(0)
|
||||
self.serv.setblocking(True)
|
||||
self.assertIsNone(self.serv.gettimeout())
|
||||
self.serv.setblocking(False)
|
||||
self.assertEqual(self.serv.gettimeout(), 0.0)
|
||||
start = time.time()
|
||||
try:
|
||||
self.serv.accept()
|
||||
|
@ -1075,6 +1090,10 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest):
|
|||
pass
|
||||
end = time.time()
|
||||
self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.")
|
||||
# Issue 15989
|
||||
if _testcapi.UINT_MAX < _testcapi.ULONG_MAX:
|
||||
self.serv.setblocking(_testcapi.UINT_MAX + 1)
|
||||
self.assertIsNone(self.serv.gettimeout())
|
||||
|
||||
def _testSetBlocking(self):
|
||||
pass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue