test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler

Fixes: rhbz#2355052
This commit is contained in:
Charalampos Stratakis 2025-04-16 05:18:41 +02:00
commit 2902fe1d79
2 changed files with 100 additions and 1 deletions

View file

@ -0,0 +1,80 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
<31488909+miss-islington@users.noreply.github.com>
Date: Mon, 11 Nov 2024 15:26:10 +0100
Subject: [PATCH] 00458: test_ssl: Don't stop ThreadedEchoServer on OSError in
ConnectionHandler
If `read()` in the ConnectionHandler thread raises `OSError` (except `ConnectionError`),
the ConnectionHandler shuts down the entire ThreadedEchoServer,
preventing further connections.
It also does that for `EPROTOTYPE` in `wrap_conn`.
Make sure that the context manager *is* used, and remove the `server.stop()`
calls from ConnectionHandler.
Backported from 3.12+:
https://github.com/python/cpython/pull/126503
Co-authored-by: Petr Viktorin <encukou@gmail.com>
---
Lib/test/test_ssl.py | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 203351bd60..0b169c37d5 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -2516,7 +2516,6 @@ def wrap_conn(self):
# See also http://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/
if e.errno != errno.EPROTOTYPE and sys.platform != "darwin":
self.running = False
- self.server.stop()
self.close()
return False
else:
@@ -2651,10 +2650,6 @@ def run(self):
self.close()
self.running = False
- # normally, we'd just stop here, but for the test
- # harness, we want to stop the server
- self.server.stop()
-
def __init__(self, certificate=None, ssl_version=None,
certreqs=None, cacerts=None,
chatty=True, connectionchatty=False, starttls_server=False,
@@ -2688,21 +2683,33 @@ def __init__(self, certificate=None, ssl_version=None,
self.conn_errors = []
threading.Thread.__init__(self)
self.daemon = True
+ self._in_context = False
def __enter__(self):
+ if self._in_context:
+ raise ValueError('Re-entering ThreadedEchoServer context')
+ self._in_context = True
self.start(threading.Event())
self.flag.wait()
return self
def __exit__(self, *args):
+ assert self._in_context
+ self._in_context = False
self.stop()
self.join()
def start(self, flag=None):
+ if not self._in_context:
+ raise ValueError(
+ 'ThreadedEchoServer must be used as a context manager')
self.flag = flag
threading.Thread.start(self)
def run(self):
+ if not self._in_context:
+ raise ValueError(
+ 'ThreadedEchoServer must be used as a context manager')
self.sock.settimeout(1.0)
self.sock.listen(5)
self.active = True

View file

@ -17,7 +17,7 @@ URL: https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist}
Release: 2%{?dist}
License: Python-2.0.1
@ -332,6 +332,21 @@ Patch371: 00371-revert-bpo-1596321-fix-threading-_shutdown-for-the-main-thread-g
# even when cross-compiling.
Patch452: 00452-properly-apply-exported-cflags-for-dtrace-systemtap-builds.patch
# 00458 # ee47b2530c18d1e0b414f5a0738ddce28e7510f4
# test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler
#
# If `read()` in the ConnectionHandler thread raises `OSError` (except `ConnectionError`),
# the ConnectionHandler shuts down the entire ThreadedEchoServer,
# preventing further connections.
# It also does that for `EPROTOTYPE` in `wrap_conn`.
#
# Make sure that the context manager *is* used, and remove the `server.stop()`
# calls from ConnectionHandler.
#
# Backported from 3.12+:
# https://github.com/python/cpython/pull/126503
Patch458: 00458-test_ssl-don-t-stop-threadedechoserver-on-oserror-in-connectionhandler.patch
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL, etc.,
@ -1647,6 +1662,10 @@ CheckPython optimized
# ======================================================
%changelog
* Wed Apr 16 2025 Charalampos Stratakis <cstratak@redhat.com> - 3.11.12-2
- test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler
- Fixes: rhbz#2355052
* Wed Apr 09 2025 Miro Hrončok <mhroncok@redhat.com> - 3.11.12-1
- Update to 3.11.12