Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a2b64e6

Browse files
committed
Issue #26309: Merge socketserver fix from 3.5
2 parents bd81129 + c12fef9 commit a2b64e6

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

Lib/socketserver.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,8 @@ def _handle_request_noblock(self):
319319
except:
320320
self.handle_error(request, client_address)
321321
self.shutdown_request(request)
322+
else:
323+
self.shutdown_request(request)
322324

323325
def handle_timeout(self):
324326
"""Called if no new request arrives within self.timeout.

Lib/test/test_socketserver.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,30 @@ def test_tcpserver_bind_leak(self):
280280
socketserver.TCPServer((HOST, -1),
281281
socketserver.StreamRequestHandler)
282282

283+
def test_shutdown_request_called_if_verify_request_false(self):
284+
# Issue #26309: BaseServer should call shutdown_request even if
285+
# verify_request is False
286+
shutdown_called = False
287+
288+
class MyServer(socketserver.TCPServer):
289+
def verify_request(self, request, client_address):
290+
return False
291+
292+
def shutdown_request(self, request):
293+
nonlocal shutdown_called
294+
shutdown_called = True
295+
super().shutdown_request(request)
296+
297+
def connect_to_server(proto, addr):
298+
s = socket.socket(proto, socket.SOCK_STREAM)
299+
s.connect(addr)
300+
s.close()
301+
302+
self.run_server(MyServer,
303+
socketserver.StreamRequestHandler,
304+
connect_to_server)
305+
self.assertEqual(shutdown_called, True)
306+
283307

284308
class MiscTestCase(unittest.TestCase):
285309

Misc/NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ Core and Builtins
186186
Library
187187
-------
188188

189+
- Issue #26309: In the "socketserver" module, shut down the request (closing
190+
the connected socket) when verify_request() returns false. Patch by Aviv
191+
Palivoda.
192+
189193
- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates.
190194

191195
- Issue #25995: os.walk() no longer uses FDs proportional to the tree depth.

0 commit comments

Comments
 (0)