diff --git a/.gitattributes b/.gitattributes
index 9b03811..a9bfeea 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -21,3 +21,4 @@
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
+*.changes merge=merge-changes
diff --git a/.gitignore b/.gitignore
index 57affb6..d6ad743 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,5 @@
.osc
+*.obscpio
+_build.*
+.pbuild
+python314-*-build/
diff --git a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
index e0e1ece..767e62c 100644
--- a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
+++ b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
@@ -4,11 +4,11 @@
Lib/test/test_xml_etree.py | 10 ++++++++++
3 files changed, 17 insertions(+)
-Index: Python-3.15.0a1/Lib/test/test_pyexpat.py
+Index: Python-3.14.0/Lib/test/test_pyexpat.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_pyexpat.py 2025-10-24 23:53:24.356893960 +0200
-+++ Python-3.15.0a1/Lib/test/test_pyexpat.py 2025-10-24 23:53:50.136311340 +0200
-@@ -843,6 +843,10 @@
+--- Python-3.14.0.orig/Lib/test/test_pyexpat.py 2025-10-08 11:27:29.989583305 +0200
++++ Python-3.14.0/Lib/test/test_pyexpat.py 2025-10-08 11:28:09.418914658 +0200
+@@ -827,6 +827,10 @@
self.assertEqual(started, ['doc'])
def test_reparse_deferral_disabled(self):
@@ -19,10 +19,10 @@ Index: Python-3.15.0a1/Lib/test/test_pyexpat.py
started = []
def start_element(name, _):
-Index: Python-3.15.0a1/Lib/test/test_sax.py
+Index: Python-3.14.0/Lib/test/test_sax.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_sax.py 2025-10-24 23:53:24.425039914 +0200
-+++ Python-3.15.0a1/Lib/test/test_sax.py 2025-10-24 23:53:50.136951370 +0200
+--- Python-3.14.0.orig/Lib/test/test_sax.py 2025-10-08 11:27:30.053760879 +0200
++++ Python-3.14.0/Lib/test/test_sax.py 2025-10-08 11:28:09.419532320 +0200
@@ -1241,6 +1241,9 @@
self.assertEqual(result.getvalue(), start + b"")
@@ -33,10 +33,10 @@ Index: Python-3.15.0a1/Lib/test/test_sax.py
def test_flush_reparse_deferral_disabled(self):
result = BytesIO()
xmlgen = XMLGenerator(result)
-Index: Python-3.15.0a1/Lib/test/test_xml_etree.py
+Index: Python-3.14.0/Lib/test/test_xml_etree.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_xml_etree.py 2025-10-24 23:53:24.855327755 +0200
-+++ Python-3.15.0a1/Lib/test/test_xml_etree.py 2025-10-24 23:53:50.137646227 +0200
+--- Python-3.14.0.orig/Lib/test/test_xml_etree.py 2025-10-08 11:27:30.502943506 +0200
++++ Python-3.14.0/Lib/test/test_xml_etree.py 2025-10-08 11:28:09.420206077 +0200
@@ -138,6 +138,11 @@
return mock.patch.object(cls, "__eq__", autospec=True, wraps=eq)
@@ -61,7 +61,7 @@ Index: Python-3.15.0a1/Lib/test/test_xml_etree.py
def test_simple_xml_chunk_5(self):
self.test_simple_xml(chunk_size=5, flush=True)
-@@ -1776,6 +1783,9 @@
+@@ -1774,6 +1781,9 @@
self.assert_event_tags(parser, [('end', 'doc')])
diff --git a/F00251-change-user-install-location.patch b/F00251-change-user-install-location.patch
index 91226dc..2968e63 100644
--- a/F00251-change-user-install-location.patch
+++ b/F00251-change-user-install-location.patch
@@ -28,10 +28,10 @@ Co-authored-by: Lumír Balhar
Lib/test/test_sysconfig.py | 17 +++++++++++++--
2 files changed, 63 insertions(+), 3 deletions(-)
-Index: Python-3.15.0a1/Lib/sysconfig/__init__.py
+Index: Python-3.14.0/Lib/sysconfig/__init__.py
===================================================================
---- Python-3.15.0a1.orig/Lib/sysconfig/__init__.py 2025-10-24 23:53:22.709921139 +0200
-+++ Python-3.15.0a1/Lib/sysconfig/__init__.py 2025-10-24 23:53:34.981019958 +0200
+--- Python-3.14.0.orig/Lib/sysconfig/__init__.py 2025-10-08 11:27:28.335887277 +0200
++++ Python-3.14.0/Lib/sysconfig/__init__.py 2025-10-08 11:28:00.652215416 +0200
@@ -106,6 +106,11 @@
else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@@ -73,7 +73,7 @@ Index: Python-3.15.0a1/Lib/sysconfig/__init__.py
_BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
# Mutex guarding initialization of _CONFIG_VARS.
_CONFIG_VARS_LOCK = threading.RLock()
-@@ -257,11 +277,40 @@
+@@ -268,11 +288,40 @@
target_dict[key] = value
@@ -115,11 +115,11 @@ Index: Python-3.15.0a1/Lib/sysconfig/__init__.py
if os.name == 'nt':
# On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it
-Index: Python-3.15.0a1/Lib/test/test_sysconfig.py
+Index: Python-3.14.0/Lib/test/test_sysconfig.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_sysconfig.py 2025-10-24 23:53:24.545975205 +0200
-+++ Python-3.15.0a1/Lib/test/test_sysconfig.py 2025-10-24 23:53:34.981457517 +0200
-@@ -131,8 +131,19 @@
+--- Python-3.14.0.orig/Lib/test/test_sysconfig.py 2025-10-08 11:27:30.181651013 +0200
++++ Python-3.14.0/Lib/test/test_sysconfig.py 2025-10-08 11:28:00.653226898 +0200
+@@ -132,8 +132,19 @@
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
@@ -140,7 +140,7 @@ Index: Python-3.15.0a1/Lib/test/test_sysconfig.py
os.path.normpath(expected),
)
-@@ -394,7 +405,7 @@
+@@ -395,7 +406,7 @@
self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self):
@@ -149,7 +149,7 @@ Index: Python-3.15.0a1/Lib/test/test_sysconfig.py
if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
-@@ -406,6 +417,8 @@
+@@ -407,6 +418,8 @@
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))
diff --git a/Python-3.14.0.tar.xz b/Python-3.14.0.tar.xz
new file mode 100644
index 0000000..7b2299a
--- /dev/null
+++ b/Python-3.14.0.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2299dae542d395ce3883aca00d3c910307cd68e0b2f7336098c8e7b7eee9f3e9
+size 23595844
diff --git a/Python-3.14.0.tar.xz.sigstore b/Python-3.14.0.tar.xz.sigstore
new file mode 100644
index 0000000..2ebe860
--- /dev/null
+++ b/Python-3.14.0.tar.xz.sigstore
@@ -0,0 +1 @@
+{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzjCCAlOgAwIBAgIUaFNOs99+mdUwhWuy93hUKegEDvowCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUxMDA3MTQxNjE4WhcNMjUxMDA3MTQyNjE4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4Zs7yR5znQ3xOtA7ekHhkbjmt11y4B0kYTAt5K3MmjxgyQ/FOzoGbiNgP1p76I5OFwbECeL6RtxqjSwJPoj9aOCAXIwggFuMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU6Jy2V0oQb2tmHwImrQplvua+1WkwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmb8HuYwAAAQDAEYwRAIgZd3lZo6EQ8hFKJ1SnKnh/pOXyLVUxesmKPdZLI/IddsCIHbkeFmcOlHbGXvzusuMaF7GDoHgfjCRXvFE1kPVSPdUMAoGCCqGSM49BAMDA2kAMGYCMQCF3LWgo5EPOs6y59yMkN8HDY/PuX+rch7scxcXUR8K+6BNw1dS8i1nGRkIvE/ttF8CMQCG6z4lu2ekjwZBMx69OmDsUlrQjOvrxmWX3pbLh4Aam7sS25DCYvVFul4RmPg/sJg="}, "tlogEntries": [{"logIndex": "588222392", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1759846578", "inclusionPromise": {"signedEntryTimestamp": "MEQCIBS/mvM2EUceWygdN+NmnJMehkFY1fRkmVmmDNICfxWVAiAoN7Vofd2SVuJYSxO/onzd87/3bWNogJlDvI7uZSTR1Q=="}, "inclusionProof": {"logIndex": "466318130", "rootHash": "RcerGwX5+QIiZjrznmUlSGFvuGAq3RMLk/7Aj/T6M3I=", "treeSize": "466318146", "hashes": ["5uTZFkdYgFmKJJdqzeeKZfjnq5Mx9K0tDsF0fjJzkCk=", "RL5Hp6IOaxPi5M/m3s97bDoAnRux0/JBccJ4+/B1vro=", "JYAmi+fU2/Su8fHV3tfQcbY//eCoHsfd2H7O1hs6HIQ=", "BbdwHf9ld92J1gFR6vWH/Gv+L9YTGwWAQytyDm+6jYc=", "J0rXI11jq+mZyPMktZmo2UlHPQw0Wyl70FQBNujJJog=", "tcYxYlxPe1g09Dr+wGWIPrCmHuFjjjwqZ4gRokgj4zE=", "X0IhqC7U/8YmeUILMTYIvlKoBEAX3aFw3IWHNcfJifc=", "kQWzYHtEr0Vhaq6Z6v4TIiuia6GrJLKcYKs25NPvkms=", "WjmJ5Vrat53AbuDR9WjO4SQADjlfkyyq+bKkkBO984w=", "k9qNU1WjJDQJ+e4prrbcOORJ5aMBlkIBACMsgKoANg0=", "Z7pLmTcnciyz67VEWMgPwiokTg9JVUQWrPf+VS85VlA=", "y/7hUHbXERsQubPR1m2uvZSz3rFsW3d9dP51hoTyX/U=", "19j/ye5CX1xbsCqb7Xkr1O2BXIOAWPwZsn7TDtr6UVc=", "JVKPJjj8WVb6G2sYzX+4PL9fC+4qskYANlO6/TIjQsE=", "XTHRaE0cHDl9HYIIwtlwjCK2+pmMP8G2rv801RmA0U8=", "ujcC9wUGq4yMg4Sr83ZRaheYdJguBWXGhnp101NfbMo=", "Kcf5veFWCVXREqqw2Q7rOJD3ttDxBxePywSepmjiSGo=", "5J6N5aNEMk6YY8lPNH0zZx95RNICDJ12cMAmpwtvGTo=", "/buh7NyeUdCgJPdaMbTAtiQpMkNHhk+xMsI2shkTieM=", "1mfy94KpcItqshH9+gwqV6jccupcaMpVsF28New8zDY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n466318146\nRcerGwX5+QIiZjrznmUlSGFvuGAq3RMLk/7Aj/T6M3I=\n\n\u2014 rekor.sigstore.dev wNI9ajBFAiEA9LofhlufYOpmdGvOuS7AvxT5koyDoOFWNEhobBt+UgYCICpTORyuqmFZWs8D1FJAry4ohDUWTSw3JegUDlUUtr3z\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIyMjk5ZGFlNTQyZDM5NWNlMzg4M2FjYTAwZDNjOTEwMzA3Y2Q2OGUwYjJmNzMzNjA5OGM4ZTdiN2VlZTlmM2U5In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNQWEhJOW9MdVNJL3RoVDg1ZXBkWlVWakh4d1M4OFpTTExLcjFmWnprWGJnSWdTUFY3ZnV1dytISGhCazljNGlBWGlCNVBJRWdMQ1kwTTVVaXNUM3h1QUcwPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZha05EUVd4UFowRjNTVUpCWjBsVllVWk9UM001T1N0dFpGVjNhRmQxZVRremFGVkxaV2RGUkhadmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZlRTFFUVROTlZGRjRUbXBGTkZkb1kwNU5hbFY0VFVSQk0wMVVVWGxPYWtVMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZDTkZwek4zbFNOWHB1VVRONFQzUkJOMlZyU0doclltcHRkREV4ZVRSQ01HdFpWRUVLZERWTE0wMXRhbmhuZVZFdlJrOTZiMGRpYVU1blVERndOelpKTlU5R2QySkZRMlZNTmxKMGVIRnFVM2RLVUc5cU9XRlBRMEZZU1hkblowWjFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlUyU25reUNsWXdiMUZpTW5SdFNIZEpiWEpSY0d4MmRXRXJNVmRyZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUWGRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRU5DYVZGWlMwdDNXVUpDUVVoWFpWRkpSVUZuVWpjS1FraHJRV1IzUWpGQlRqQTVUVWR5UjNoNFJYbFplR3RsU0Vwc2JrNTNTMmxUYkRZME0ycDVkQzgwWlV0amIwRjJTMlUyVDBGQlFVSnRZamhJZFZsM1FRcEJRVkZFUVVWWmQxSkJTV2RhWkROc1dtODJSVkU0YUVaTFNqRlRia3R1YUM5d1QxaDVURlpWZUdWemJVdFFaRnBNU1M5SlpHUnpRMGxJWW10bFJtMWpDazlzU0dKSFdIWjZkWE4xVFdGR04wZEViMGhuWm1wRFVsaDJSa1V4YTFCV1UxQmtWVTFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbXRCVFVkWlEwMVJRMFlLTTB4WFoyODFSVkJQY3paNU5UbDVUV3RPT0VoRVdTOVFkVmdyY21Ob04zTmplR05ZVlZJNFN5czJRazUzTVdSVE9Ha3hia2RTYTBsMlJTOTBkRVk0UXdwTlVVTkhObm8wYkhVeVpXdHFkMXBDVFhnMk9VOXRSSE5WYkhKUmFrOTJjbmh0VjFnemNHSk1hRFJCWVcwM2MxTXlOVVJEV1haV1JuVnNORkp0VUdjdkNuTktaejBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}]}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "Ipna5ULTlc44g6ygDTyRAwfNaOCy9zNgmMjnt+7p8+k="}, "signature": "MEUCIQCPXHI9oLuSI/thT85epdZUVjHxwS88ZSLLKr1fZzkXbgIgSPV7fuuw+HHhBk9c4iAXiB5PIEgLCY0M5UisT3xuAG0="}}
diff --git a/Python-3.15.0a1.tar.xz b/Python-3.15.0a1.tar.xz
deleted file mode 100644
index 26d8153..0000000
--- a/Python-3.15.0a1.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3194939d488eeaeefdcf990d35542d9ad1ce788789c4e2305a2060eb7058e5a4
-size 23646768
diff --git a/Python-3.15.0a1.tar.xz.sigstore b/Python-3.15.0a1.tar.xz.sigstore
deleted file mode 100644
index 7b84f4e..0000000
--- a/Python-3.15.0a1.tar.xz.sigstore
+++ /dev/null
@@ -1 +0,0 @@
-{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzTCCAlSgAwIBAgIUHBnJY2cDVNyp0+jVDU64RXDfTLUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUxMDE0MTQ0NjIwWhcNMjUxMDE0MTQ1NjIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELQMCqzrc9clNKPUzmojg3JbTM3XXjmo/wWH6zH8rh6GGP8TJSz+A8OMUdeE7ktSr5+9QeVaEGDRasbmwIAKX8aOCAXMwggFvMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQULWp/zwV2HmZ8X/y10L1ftl0hN5QwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmeMvvDEAAAQDAEcwRQIhALiWW21hVw6w95sI+lVh8NFcaWG1KITMvDC0HytgwrkTAiBmnB/Il7sqNC9TV3ybSbyMgXUrXlpz7Y4+ri6qEe8OmjAKBggqhkjOPQQDAwNnADBkAjAav7uspSvsMYLOIqcV65W7UEfUl/+oaDVcAnUBTn4VzzWVNt7rRh/sGU9Ow1fsgaQCMHKjjdlRouWZV13QxRqUlwiYnso8K/LrepolTWuu9hmJ4498BbxpQkG82AiFgwHKiA=="}, "tlogEntries": [{"logIndex": "605381105", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1760453180", "inclusionPromise": {"signedEntryTimestamp": "MEUCIQD2M+xpYMeDZb0B+2kBuUQDfsBPNuaNbOPB/tLnCY1+CwIgH1bBckucAYWz+3wFvU9MVGWc985g1wJsYy27aYYg+5c="}, "inclusionProof": {"logIndex": "483476843", "rootHash": "VcoiuI3enMGLjUhgMzdjfI+PlOWmz/r/ADehdiW44fo=", "treeSize": "483476848", "hashes": ["r/fQjBRZKxYDs6T00FfDqZfE3gNFN5jUw2hPbI6Klb4=", "Fu7qRL8q8yz4aWKTEU5+PzVtd9R4k7HkP62EtCYWURQ=", "jvpXra7v+FEGbwj68er3f1BUvjOiYUjCL/pwYF0UG6c=", "VxMxwBbsJTw+9QBfKnXMOxyeZ7HJKlExLQMtqStpg0Y=", "fU2ETS/0MxEeuY1O0lS9SJrXcXC78pJVOtXCNv7LymQ=", "TS0t//1G9191vAjMg50KLfXBi3UY8ANFmx1ZNp2k5vk=", "1bdCuQIZjyx9tCJXNrYevW3fyHk6huvJ/h5uIlfIiy0=", "wjy79ir2+9dNofV/yngwyU7P7qEQoJWbN/f/+YIqeSg=", "Tx/mYCxiKxJdXGSB99WD+yAVDPg18BLOj5lDqPQUNe4=", "eSCfK8nXzRpj/m2HYQ9+GtLIccUwLOkk3iYGC4R5zXI=", "inrOYOb+roitD1EYWHmRPy8aJnjhSAhp5cHXbXVlxU4=", "8nCds1SUzxGg2Xoa+M1tOFTwx+1BGtp8TDMSS4P54xQ=", "V5lOdefY1WOOt4iQp7tZoyj1beBDVi24KsEMcgsqZds=", "2Wv4GiithwNukRKV06clevnQQYCzXmSS/+/OJtXgsXQ=", "1mfy94KpcItqshH9+gwqV6jccupcaMpVsF28New8zDY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n483476848\nVcoiuI3enMGLjUhgMzdjfI+PlOWmz/r/ADehdiW44fo=\n\n\u2014 rekor.sigstore.dev wNI9ajBGAiEAhRdd+DI17Uc7iB9ExZ3kq9O47UtmJyeRF8AcagocSIYCIQCjl6Z9CXp3exjHHmeQCwLAVOGRbCfKwsbuQAZwl4K80A==\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzMTk0OTM5ZDQ4OGVlYWVlZmRjZjk5MGQzNTU0MmQ5YWQxY2U3ODg3ODljNGUyMzA1YTIwNjBlYjcwNThlNWE0In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQkZ3NFEvelFZcnJWNHlSalN0TmkwSkd3NG80VTdjWGlCWFZHUksrYTVNV0FpQmFBYTBMTUN6VkZxelVEbVkrMEYranZEQm8waFJUc25JckVUY1RMY1ZPZkE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZWRU5EUVd4VFowRjNTVUpCWjBsVlNFSnVTbGt5WTBSV1RubHdNQ3RxVmtSVk5qUlNXRVJtVkV4VmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZlRTFFUlRCTlZGRXdUbXBKZDFkb1kwNU5hbFY0VFVSRk1FMVVVVEZPYWtsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZNVVUxRGNYcHlZemxqYkU1TFVGVjZiVzlxWnpOS1lsUk5NMWhZYW0xdkwzZFhTRFlLZWtnNGNtZzJSMGRRT0ZSS1Uzb3JRVGhQVFZWa1pVVTNhM1JUY2pVck9WRmxWbUZGUjBSU1lYTmliWGRKUVV0WU9HRlBRMEZZVFhkblowWjJUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZNVjNBdkNucDNWakpJYlZvNFdDOTVNVEJNTVdaMGJEQm9UalZSZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUWGRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRU5DYVdkWlMwdDNXVUpDUVVoWFpWRkpSVUZuVWpnS1FraHZRV1ZCUWpKQlRqQTVUVWR5UjNoNFJYbFplR3RsU0Vwc2JrNTNTMmxUYkRZME0ycDVkQzgwWlV0amIwRjJTMlUyVDBGQlFVSnRaVTEyZGtSRlFRcEJRVkZFUVVWamQxSlJTV2hCVEdsWFZ6SXhhRlozTm5jNU5YTkpLMnhXYURoT1JtTmhWMGN4UzBsVVRYWkVRekJJZVhSbmQzSnJWRUZwUW0xdVFpOUpDbXczYzNGT1F6bFVWak41WWxOaWVVMW5XRlZ5V0d4d2VqZFpOQ3R5YVRaeFJXVTRUMjFxUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV1UVVSQ2EwRnFRV0VLZGpkMWMzQlRkbk5OV1V4UFNYRmpWalkxVnpkVlJXWlZiQzhyYjJGRVZtTkJibFZDVkc0MFZucDZWMVpPZERkeVVtZ3ZjMGRWT1U5M01XWnpaMkZSUXdwTlNFdHFhbVJzVW05MVYxcFdNVE5SZUZKeFZXeDNhVmx1YzI4NFN5OU1jbVZ3YjJ4VVYzVjFPV2h0U2pRME9UaENZbmh3VVd0SE9ESkJhVVpuZDBoTENtbEJQVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}]}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "MZSTnUiO6u79z5kNNVQtmtHOeIeJxOIwWiBg63BY5aQ="}, "signature": "MEQCIBFw4Q/zQYrrV4yRjStNi0JGw4o4U7cXiBXVGRK+a5MWAiBaAa0LMCzVFqzUDmY+0F+jvDBo0hRTsnIrETcTLcVOfA=="}}
diff --git a/baselibs.conf b/baselibs.conf
index 6b18549..d43116d 100644
--- a/baselibs.conf
+++ b/baselibs.conf
@@ -1,3 +1,3 @@
-python315-base
-python315
-libpython3_15-1_0
+python314-base
+python314
+libpython3_14-1_0
diff --git a/bpo-31046_ensurepip_honours_prefix.patch b/bpo-31046_ensurepip_honours_prefix.patch
index 6c317b5..a962e30 100644
--- a/bpo-31046_ensurepip_honours_prefix.patch
+++ b/bpo-31046_ensurepip_honours_prefix.patch
@@ -13,10 +13,10 @@ Co-Authored-By: Xavier de Gaye
5 files changed, 37 insertions(+), 9 deletions(-)
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
-Index: Python-3.15.0a1/Doc/library/ensurepip.rst
+Index: Python-3.14.0rc1/Doc/library/ensurepip.rst
===================================================================
---- Python-3.15.0a1.orig/Doc/library/ensurepip.rst 2025-10-14 12:46:08.000000000 +0200
-+++ Python-3.15.0a1/Doc/library/ensurepip.rst 2025-10-24 23:53:43.587408643 +0200
+--- Python-3.14.0rc1.orig/Doc/library/ensurepip.rst 2025-07-22 18:42:44.000000000 +0200
++++ Python-3.14.0rc1/Doc/library/ensurepip.rst 2025-07-23 10:10:31.690342385 +0200
@@ -61,7 +61,11 @@
By default, ``pip`` is installed into the current virtual environment
(if one is active) or into the system site packages (if there is no
@@ -57,10 +57,10 @@ Index: Python-3.15.0a1/Doc/library/ensurepip.rst
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
.. note::
-Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
+Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
===================================================================
---- Python-3.15.0a1.orig/Lib/ensurepip/__init__.py 2025-10-24 23:53:22.118065622 +0200
-+++ Python-3.15.0a1/Lib/ensurepip/__init__.py 2025-10-24 23:53:43.587899003 +0200
+--- Python-3.14.0rc1.orig/Lib/ensurepip/__init__.py 2025-07-23 10:10:18.541751619 +0200
++++ Python-3.14.0rc1/Lib/ensurepip/__init__.py 2025-07-23 10:10:31.690818287 +0200
@@ -106,27 +106,27 @@
os.environ['PIP_CONFIG_FILE'] = os.devnull
@@ -94,7 +94,7 @@ Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
Note that calling this function will alter both sys.path and os.environ.
"""
-@@ -171,6 +171,8 @@
+@@ -162,6 +162,8 @@
args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir]
if root:
args += ["--root", root]
@@ -103,7 +103,7 @@ Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
if upgrade:
args += ["--upgrade"]
if user:
-@@ -247,6 +249,11 @@
+@@ -238,6 +240,11 @@
help="Install everything relative to this alternate root directory.",
)
parser.add_argument(
@@ -115,7 +115,7 @@ Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
"--altinstall",
action="store_true",
default=False,
-@@ -265,6 +272,7 @@
+@@ -256,6 +263,7 @@
return _bootstrap(
root=args.root,
@@ -123,11 +123,11 @@ Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
upgrade=args.upgrade,
user=args.user,
verbosity=args.verbosity,
-Index: Python-3.15.0a1/Lib/test/test_ensurepip.py
+Index: Python-3.14.0rc1/Lib/test/test_ensurepip.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_ensurepip.py 2025-10-24 23:53:23.546712597 +0200
-+++ Python-3.15.0a1/Lib/test/test_ensurepip.py 2025-10-24 23:53:43.588286136 +0200
-@@ -105,6 +105,17 @@
+--- Python-3.14.0rc1.orig/Lib/test/test_ensurepip.py 2025-07-23 10:10:19.969641992 +0200
++++ Python-3.14.0rc1/Lib/test/test_ensurepip.py 2025-07-23 10:10:31.691217643 +0200
+@@ -100,6 +100,17 @@
unittest.mock.ANY,
)
@@ -145,11 +145,11 @@ Index: Python-3.15.0a1/Lib/test/test_ensurepip.py
def test_bootstrapping_with_user(self):
ensurepip.bootstrap(user=True)
-Index: Python-3.15.0a1/Makefile.pre.in
+Index: Python-3.14.0rc1/Makefile.pre.in
===================================================================
---- Python-3.15.0a1.orig/Makefile.pre.in 2025-10-24 23:53:39.419910772 +0200
-+++ Python-3.15.0a1/Makefile.pre.in 2025-10-24 23:53:43.588889640 +0200
-@@ -2378,7 +2378,7 @@
+--- Python-3.14.0rc1.orig/Makefile.pre.in 2025-07-23 10:10:27.325708066 +0200
++++ Python-3.14.0rc1/Makefile.pre.in 2025-07-23 10:10:31.691716104 +0200
+@@ -2371,7 +2371,7 @@
install|*) ensurepip="" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -158,7 +158,7 @@ Index: Python-3.15.0a1/Makefile.pre.in
fi
.PHONY: altinstall
-@@ -2389,7 +2389,7 @@
+@@ -2382,7 +2382,7 @@
install|*) ensurepip="--altinstall" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -167,9 +167,9 @@ Index: Python-3.15.0a1/Makefile.pre.in
fi
.PHONY: commoninstall
-Index: Python-3.15.0a1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
+Index: Python-3.14.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ Python-3.15.0a1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-10-24 23:53:43.589498870 +0200
++++ Python-3.14.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-07-23 10:10:31.692253536 +0200
@@ -0,0 +1 @@
+A directory prefix can now be specified when using :mod:`ensurepip`.
diff --git a/fix-test-recursion-limit-15.6.patch b/fix-test-recursion-limit-15.6.patch
index f24a9a4..df002a4 100644
--- a/fix-test-recursion-limit-15.6.patch
+++ b/fix-test-recursion-limit-15.6.patch
@@ -2,10 +2,10 @@
Lib/test/test_compile.py | 5 +++++
1 file changed, 5 insertions(+)
-Index: Python-3.15.0a1/Lib/test/test_compile.py
+Index: Python-3.14.0b3/Lib/test/test_compile.py
===================================================================
---- Python-3.15.0a1.orig/Lib/test/test_compile.py 2025-10-24 23:53:23.250923195 +0200
-+++ Python-3.15.0a1/Lib/test/test_compile.py 2025-10-24 23:53:52.578315707 +0200
+--- Python-3.14.0b3.orig/Lib/test/test_compile.py 2025-06-22 00:32:01.975698954 +0200
++++ Python-3.14.0b3/Lib/test/test_compile.py 2025-06-22 00:32:07.740981155 +0200
@@ -24,6 +24,9 @@
from test.support.bytecode_helper import instructions_with_positions
from test.support.os_helper import FakePath
@@ -24,7 +24,7 @@ Index: Python-3.15.0a1/Lib/test/test_compile.py
@support.skip_emscripten_stack_overflow()
def test_extended_arg(self):
repeat = 100
-@@ -724,6 +728,7 @@
+@@ -709,6 +713,7 @@
@support.cpython_only
@unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI")
diff --git a/gh138131-exclude-pycache-from-digest.patch b/gh138131-exclude-pycache-from-digest.patch
new file mode 100644
index 0000000..c5e371d
--- /dev/null
+++ b/gh138131-exclude-pycache-from-digest.patch
@@ -0,0 +1,30 @@
+From 4bb41b28d5bac09bccd636d8c5fefe1a462f63a7 Mon Sep 17 00:00:00 2001
+From: Alm
+Date: Mon, 25 Aug 2025 08:56:38 +0300
+Subject: [PATCH 1/4] Exclude .pyc files from the computed digest in the jit
+ stencils
+
+---
+ Tools/jit/_targets.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+Index: Python-3.14.0rc2/Tools/jit/_targets.py
+===================================================================
+--- Python-3.14.0rc2.orig/Tools/jit/_targets.py
++++ Python-3.14.0rc2/Tools/jit/_targets.py
+@@ -69,6 +69,9 @@ class _Target(typing.Generic[_S, _R]):
+ hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes())
+ hasher.update((self.pyconfig_dir / "pyconfig.h").read_bytes())
+ for dirpath, _, filenames in sorted(os.walk(TOOLS_JIT)):
++ # Exclude cache files from digest computation to ensure reproducible builds.
++ if dirpath.endswith("__pycache__"):
++ continue
+ for filename in filenames:
+ hasher.update(pathlib.Path(dirpath, filename).read_bytes())
+ return hasher.hexdigest()
+Index: Python-3.14.0rc2/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
+===================================================================
+--- /dev/null
++++ Python-3.14.0rc2/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
+@@ -0,0 +1 @@
++Ensure reproducible builds by making JIT stencil header generation deterministic.
diff --git a/gh139257-Support-docutils-0.22.patch b/gh139257-Support-docutils-0.22.patch
index cdbaf5b..9e26f6f 100644
--- a/gh139257-Support-docutils-0.22.patch
+++ b/gh139257-Support-docutils-0.22.patch
@@ -7,12 +7,12 @@ Subject: [PATCH 1/2] gh-139257: Support docutils >= 0.22
Doc/tools/extensions/pyspecific.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
-Index: Python-3.15.0a1/Doc/tools/extensions/pyspecific.py
+Index: Python-3.14.0/Doc/tools/extensions/pyspecific.py
===================================================================
---- Python-3.15.0a1.orig/Doc/tools/extensions/pyspecific.py 2025-10-14 12:46:08.000000000 +0200
-+++ Python-3.15.0a1/Doc/tools/extensions/pyspecific.py 2025-10-24 23:55:02.700550007 +0200
-@@ -25,11 +25,21 @@
- SOURCE_URI = 'https://github.com/python/cpython/tree/main/%s'
+--- Python-3.14.0.orig/Doc/tools/extensions/pyspecific.py
++++ Python-3.14.0/Doc/tools/extensions/pyspecific.py
+@@ -25,11 +25,21 @@ from sphinx.util.docutils import SphinxD
+ SOURCE_URI = 'https://github.com/python/cpython/tree/3.14/%s'
# monkey-patch reST parser to disable alphabetic and roman enumerated lists
+def _disable_alphabetic_and_roman(text):
diff --git a/python-3.3.0b1-fix_date_time_compiler.patch b/python-3.3.0b1-fix_date_time_compiler.patch
index 7f1b240..6f21f15 100644
--- a/python-3.3.0b1-fix_date_time_compiler.patch
+++ b/python-3.3.0b1-fix_date_time_compiler.patch
@@ -2,11 +2,11 @@
Makefile.pre.in | 5 +++++
1 file changed, 5 insertions(+)
-Index: Python-3.15.0a1/Makefile.pre.in
+Index: Python-3.14.0rc1/Makefile.pre.in
===================================================================
---- Python-3.15.0a1.orig/Makefile.pre.in 2025-10-14 12:46:08.000000000 +0200
-+++ Python-3.15.0a1/Makefile.pre.in 2025-10-24 23:53:39.419910772 +0200
-@@ -1917,6 +1917,11 @@
+--- Python-3.14.0rc1.orig/Makefile.pre.in 2025-07-22 18:42:44.000000000 +0200
++++ Python-3.14.0rc1/Makefile.pre.in 2025-07-23 10:10:27.325708066 +0200
+@@ -1910,6 +1910,11 @@
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
-o $@ $(srcdir)/Modules/getbuildinfo.c
diff --git a/python315-rpmlintrc b/python314-rpmlintrc
similarity index 100%
rename from python315-rpmlintrc
rename to python314-rpmlintrc
diff --git a/python315.changes b/python314.changes
similarity index 86%
rename from python315.changes
rename to python314.changes
index 6521080..adbebc6 100644
--- a/python315.changes
+++ b/python314.changes
@@ -1,1746 +1,3 @@
--------------------------------------------------------------------
-Fri Oct 24 21:45:47 UTC 2025 - Matej Cepl
-
-- New development of new major version, update to 3.15.0~a1:
- - Tools/Demos
- - gh-139330: SBOM generation tool didn’t cross-check
- the version and checksum values against the
- Modules/expat/refresh.sh script, leading to the values
- becoming out-of-date during routine updates.
- - gh-132006: XCframeworks now include privacy manifests to
- satisfy Apple App Store submission requirements.
- - gh-138171: A script for building an iOS XCframework was
- added. As part of this change, the top level iOS folder has
- been moved to be a subdirectory of the Apple folder.
- - gh-137873: The iOS test runner has been simplified,
- resolving some issues that have been observed using
- the runner in GitHub Actions and Azure Pipelines test
- environments.
- - gh-137484: Have Tools/wasm/wasi put the build Python into a
- directory named after the build triple instead of “build”.
- - gh-137025: The wasm_build.py script has been removed.
- Tools/wasm/emscripten and Tools/wasm/wasi should be used
- instead, as described in the Dev Guide.
- - gh-137248: Add a --logdir option to Tools/wasm/wasi for
- specifying where to write log files.
- - gh-137243: Have Tools/wasm/wasi detect a WASI SDK install
- in /opt when it was directly extracted from a release
- tarball.
- - gh-136251: Fixes and usability improvements for
- Tools/wasm/emscripten/web_example
- - gh-135968: Stubs for strip are now provided as part of an
- iOS install.
- - gh-135379: The cases generator no longer accepts type
- annotations on stack items. Conversions to non-default
- types are now done explicitly in bytecodes.c and
- optimizer_bytecodes.c. This will simplify code generation
- for top-of-stack caching and other future features.
- - gh-134215: REPL import autocomplete only suggests private
- modules when explicitly specified.
- - Tests
- - gh-139208: Fix regrtest --fast-ci --verbose: don’t ignore
- the --verbose option anymore. Patch by Victor Stinner.
- - gh-138313: Restore skipped test and add janky workaround
- to prevent select buildbots from failing with a
- ResourceWarning.
- - gh-135966: The iOS testbed now handles the app_packages
- folder as a site directory.
- - gh-135494: Fix regrtest to support excluding tests from
- --pgo tests. Patch by Victor Stinner.
- - gh-132815: Fix test__opcode: add JUMP_BACKWARD to
- specialization stats.
- - gh-135489: Show verbose output for failing tests during PGO
- profiling step with –enable-optimizations.
- - gh-135401: Add a new GitHub CI job to test the ssl module
- with AWS-LC as the backing cryptography and TLS library.
- - gh-135120: Add test.support.subTests().
- - gh-134567: Expose log formatter to users in
- TestCase.assertLogs. unittest.TestCase.assertLogs() will
- now optionally accept a formatter that will be used to
- format the strings in output if provided.
- - gh-133744: Fix multiprocessing interrupt test. Add an event
- to synchronize the parent process with the child process:
- wait until the child process starts sleeping. Patch by
- Victor Stinner.
- - gh-133682: Fixed test case
- test.test_annotationlib.TestStringFormat.test_displays
- which ensures proper handling of complex data structures
- (lists, sets, dictionaries, and tuples) in string
- annotations.
- - gh-133639: Fix
- TestPyReplAutoindent.test_auto_indent_default() doesn’t run
- input_code.
- - Security
- - gh-139700: Check consistency of the zip64 end of central
- directory record. Support records with “zip64 extensible
- data” if there are no bytes prepended to the ZIP file.
- - gh-139400: xml.parsers.expat: Make sure that parent
- Expat parsers are only garbage-collected once they
- are no longer referenced by subparsers created by
- ExternalEntityParserCreate(). Patch by Sebastian Pipping.
- - gh-139283: sqlite3: correctly handle maximum number of rows
- to fetch in Cursor.fetchmany and reject negative values for
- Cursor.arraysize. Patch by Bénédikt Tran.
- - gh-136053: marshal: fix a possible crash when deserializing
- slice objects.
- - gh-135661: Fix parsing start and end tags in
- html.parser.HTMLParser according to the HTML5 standard.
- - Whitespaces no longer accepted between and the tag
- name. E.g. script> does not end the script section.
- - Vertical tabulation (\v) and non-ASCII whitespaces no
- longer recognized as whitespaces. The only whitespaces
- are \t\n\r\f and space.
- - Null character (U+0000) no longer ends the tag name.
- - Attributes and slashes after the tag name in end tags are
- now ignored, instead of terminating after the first > in
- quoted attribute value. E.g. "/>.
- - Multiple slashes and whitespaces between the last
- attribute and closing > are now ignored in both start and
- end tags. E.g. .
- - Multiple = between attribute name and value are no longer
- collapsed. E.g. produces attribute “foo”
- with value “=bar”.
- - gh-135661: Fix CDATA section parsing in
- html.parser.HTMLParser according to the HTML5 standard: ]
- ]> and ]] > no longer end the CDATA section. Add private
- method _set_support_cdata() which can be used to specify
- how to parse <[CDATA[ — as a CDATA section in foreign
- content (SVG or MathML) or as a bogus comment in the HTML
- namespace.
- - gh-102555: Fix comment parsing in html.parser.HTMLParser
- according to the HTML5 standard. --!> now ends the comment.
- -- > no longer ends the comment. Support abnormally ended
- empty comments <--> and <--->.
- - gh-135462: Fix quadratic complexity in processing specially
- crafted input in html.parser.HTMLParser. End-of-file errors
- are now handled according to the HTML5 specs – comments and
- declarations are automatically closed, tags are ignored.
- - gh-118350: Fix support of escapable raw text mode (elements
- “textarea” and “title”) in html.parser.HTMLParser.
- - gh-135034: Fixes multiple issues that allowed tarfile
- extraction filters (filter="data" and filter="tar") to be
- bypassed using crafted symlinks and hard links.
- - Addresses CVE 2024-12718, CVE 2025-4138, CVE 2025-4330, and
- CVE 2025-4517.
- - gh-133767: Fix use-after-free in the “unicode-escape”
- decoder with a non-“strict” error handler.
- - gh-133623: Indicate through ssl.HAS_PSK_TLS13 whether
- the ssl module supports “External PSKs” in TLSv1.3, as
- described in RFC 9258. Patch by Will Childs-Klein.
- - gh-128840: Short-circuit the processing of long IPv6
- addresses early in ipaddress to prevent excessive memory
- consumption and a minor denial-of-service.
- - Library
- - gh-139482: Optimize os.environ.clear() by calling
- clearenv(3) when this function is available. Patch by
- Victor Stinner.
- - gh-139958: The application/toml mime type is now supported
- by mimetypes. Patch by Gil Forcada.
- - gh-139823: ensurepip now fails with a nicer error message
- when the zlib module is not available.
- - gh-139905: Add suggestion to error message for
- typing.Generic subclasses when cls.__parameters__
- is missing due to a parent class failing to call
- super().__init_subclass__() in its __init_subclass__.
- - gh-139894: Fix incorrect sharing of current task with the
- child process while forking in asyncio. Patch by Kumar
- Aditya.
- - gh-139845: Fix to not print KeyboardInterrupt twice in
- default asyncio REPL.
- - gh-139783: Fix inspect.getsourcelines() for the case when a
- decorator is followed by a comment or an empty line.
- - gh-139809: Prevent premature colorization of subparser prog
- in argparse.ArgumentParser.add_subparsers() to respect
- color environment variable changes after parser creation.
- - gh-139736: Fix excessive indentation in the default
- argparse HelpFormatter. Patch by Alexander Edland.
- - gh-70765: http.server: fix default handling of HTTP/0.9
- requests in BaseHTTPRequestHandler. Previously,
- BaseHTTPRequestHandler.parse_request() incorrectly waited
- for headers in the request although those are not supported
- in HTTP/0.9. Patch by Bénédikt Tran.
- - gh-139322: Fix os.getlogin() error handling: fix the error
- number. Patch by Victor Stinner.
- - gh-135953: Add a Gecko format output to the tachyon
- profiler via --gecko.
- - gh-139184: os.forkpty() does now make the returned file
- descriptor non-inheritable.
- - gh-139391: Fix an issue when, on non-Windows platforms, it
- was not possible to gracefully exit a python -m asyncio
- process suspended by Ctrl+Z and later resumed by fg other
- than with kill.
- - gh-139374: timeit: Add color to error tracebacks.
- - gh-90949: Add
- SetBillionLaughsAttackProtectionActivationThreshold() and
- SetBillionLaughsAttackProtectionMaximumAmplification()
- to xmlparser objects to tune protections against billion
- laughs attacks. Patch by Bénédikt Tran.
- - gh-139312: Upgrade bundled libexpat to 2.7.3
- - gh-139289: Do a real lazy-import on rlcompleter in pdb and
- restore the existing completer after importing rlcompleter.
- - gh-90949: Add SetAllocTrackerActivationThreshold() and
- SetAllocTrackerMaximumAmplification() to xmlparser objects
- to tune protections against disproportional amounts of
- dynamic memory usage from within an Expat parser. Patch by
- Bénédikt Tran.
- - gh-67795: Functions that take timestamp or timeout
- arguments now accept any real numbers (such as Decimal and
- Fraction), not only integers or floats, although this does
- not improve precision.
- - gh-95953: A CSS class, diff_changed, was added to the
- changed lines in the make_table output of difflib.HtmlDiff.
- Patch by Katie Gardner.
- - gh-139210: Fix use-after-free when reporting unknown event
- in xml.etree.ElementTree.iterparse(). Patch by Ken Jin.
- - gh-138860: Lazy import rlcompleter in pdb to avoid deadlock
- in subprocess.
- - gh-112729: Fix crash when calling
- concurrent.interpreters.create() when the process is out of
- memory.
- - gh-126016: Fix an assertion failure when sending
- KeyboardInterrupt to a Python process running a
- subinterpreter in a separate thread.
- - gh-118803: collections.abc.ByteString has been removed from
- collections.abc.__all__, and typing.ByteString has been
- removed from typing.__all__. The former has been deprecated
- since Python 3.12, and the latter has been deprecated since
- Python 3.9. Both classes are scheduled for removal in
- Python 3.17.
- - Additionally, the following statements now cause
- DeprecationWarnings to be emitted at runtime:
- from collections.abc import ByteString, from
- typing import ByteString, import collections.abc;
- collections.abc.ByteString and import typing;
- typing.ByteString. Both classes already caused
- DeprecationWarnings to be emitted if they were subclassed
- or used as the second argument to isinstance() or
- issubclass(), but they did not previously lead to
- DeprecationWarnings if they were merely imported or
- accessed from their respective modules.
- - gh-135729: Fix unraisable exception during finalization
- when using concurrent.interpreters in the REPL.
- - gh-139076: Fix a bug in the pydoc module that was hiding
- functions in a Python module if they were implemented in an
- extension module and the module did not have __all__.
- - gh-139090: Add os.RWF_DONTCACHE constant for Linux 6.14+.
- - gh-139065: Fix trailing space before a wrapped long word if
- the line length is exactly width in textwrap.
- - gh-139001: Fix race condition in pathlib.Path on the
- internal _raw_paths field.
- - gh-138813: multiprocessing.BaseProcess defaults kwargs to
- None instead of a shared dictionary.
- - gh-138998: Update bundled libexpat to 2.7.2
- - gh-138993: Dedent credits text.
- - gh-118803: Add back collections.abc.ByteString and
- typing.ByteString. Both had been removed in prior alpha,
- beta and release candidates for Python 3.14, but their
- removal has now been postponed to Python 3.17.
- - gh-130567: Fix possible crash in locale.strxfrm() due to a
- platform bug on macOS.
- - gh-137226: Fix typing.get_type_hints() calls on generic
- typing.TypedDict classes defined with string annotations.
- - gh-138899: Executing quit command in pdb will raise
- bdb.BdbQuit when pdb is started from an asyncio console
- using breakpoint() or pdb.set_trace().
- - gh-138804: Raise TypeError instead of AttributeError when
- an argument of incorrect type is passed to shlex.quote().
- This restores the behavior of the function prior to 3.14.
- - gh-138779: Support device numbers larger than 2**63-1 for
- the st_rdev field of the os.stat_result structure.
- - gh-138682: Added symmetric difference support to
- collections.Counter objects.
- - gh-138712: Add os.NODEV.
- - gh-128636: Fix crash in PyREPL when os.environ is
- overwritten with an invalid value for mac
- - gh-138720: Fix an issue where io.BufferedWriter and
- io.BufferedRandom had different definitions of “closed” for
- close() and flush() which resulted in an exception when
- close called flush but flush thought the file was already
- closed.
- - gh-138706: Update unicodedata database to Unicode 17.0.0.
- - gh-76007: Deprecate __version__ from a number of standard
- library modules. Patch by Hugo van Kemenade.
- - gh-138535: Speed up os.stat() for files with reasonable
- timestamps. Contributed by Jeffrey Bosboom.
- - gh-116946: curses.panel: the type of
- curses.panel.new_panel() is now immutable. Patch by
- Bénédikt Tran.
- - gh-116946: zlib: the types of zlib.compressobj() and
- zlib.decompressobj() are now immutable. Patch by Bénédikt
- Tran.
- - gh-116946: os: the os.DirEntry type and the type of
- os.scandir() are now immutable. Patch by Bénédikt Tran.
- - gh-116946: tkinter: the types _tkinter.Tcl_Obj (wrapper
- for Tcl objects), _tkinter.tktimertoken (obtained by
- calling createtimerhandler() on a Tk application) and
- _tkinter.tkapp (the runtime type of Tk applications) are
- now immutable. Patch by Bénédikt Tran.
- - gh-138514: Raise ValueError when a multi-character string
- is passed to the echo_char parameter of getpass.getpass().
- Patch by Benjamin Johnson.
- - gh-137706: Fix the partial evaluation of annotations that
- use typing.Annotated[T, x] where T is a forward reference.
- - gh-88375: Fix normalization of the robots.txt rules and
- URLs in the urllib.robotparser module. No longer ignore
- trailing ?. Distinguish raw special characters ?, = and &
- from the percent-encoded ones.
- - gh-138515: email is added to Emscripten build.
- - gh-99948: ctypes.util.find_library() now works in
- Emscripten build.
- - gh-111788: Fix parsing errors in the urllib.robotparser
- module. Don’t fail trying to parse weird paths. Don’t fail
- trying to decode non-UTF-8 robots.txt files.
- - gh-138432: zoneinfo.reset_tzpath() will now convert any
- os.PathLike objects it receives into strings before adding
- them to TZPATH. It will raise TypeError if anything other
- than a string is found after this conversion. If given an
- os.PathLike object that represents a relative path, it will
- now raise ValueError instead of TypeError, and present a
- more informative error message.
- - gh-132657: Improve the scaling of copy.copy() and
- copy.deepcopy() in the free-threading build.
- - gh-116946: The types of select.poll() and select.epoll()
- objects are now immutable. Patch by Bénédikt Tran.
- - gh-116946: The _random.Random C type is now immutable.
- Patch by Bénédikt Tran.
- - gh-57911: When extracting tar files on Windows, slashes in
- symlink targets will be replaced by backslashes to prevent
- corrupted links.
- - gh-138205: Removed the resize() method on platforms that
- don’t support the underlying syscall, instead of raising a
- SystemError.
- - gh-138008: Fix segmentation faults in the ctypes module due
- to invalid argtypes. Patch by Dung Nguyen.
- - gh-138252: ssl: SSLContext objects can now set client and
- server TLS signature algorithms. If Python has been built
- with OpenSSL 3.5 or later, SSLSocket objects can return the
- signature algorithms selected on a connection.
- - gh-138253: Add the block parameter in the put() and
- get() methods of the concurrent.interpreters queues for
- compatibility with the queue.Queue interface.
- - gh-60462: Fix locale.strxfrm() on Solaris (and possibly
- other platforms).
- - gh-138239: The REPL now highlights type as a soft keyword
- in type statements.
- - gh-78502: mmap.mmap now has a trackfd parameter on Windows;
- if it is False, the file handle corresponding to fileno
- will not be duplicated.
- - gh-138204: Forbid expansion of shared anonymous memory maps
- on Linux, which caused a bus error.
- - gh-138010: Fix an issue where defining a class with a
- @warnings.deprecated-decorated base class may not invoke
- the correct __init_subclass__() method in cases involving
- multiple inheritance. Patch by Brian Schubert.
- - gh-134716: Add support of regular expressions in the -W
- option and the PYTHONWARNINGS environment variable.
- - gh-138133: Prevent infinite traceback loop when sending
- CTRL^C to Python through strace.
- - gh-138122: Implement PEP 799 – A dedicated profiling
- package for organizing Python profiling tools. Patch by
- Pablo Galindo.
- - gh-138092: Fixed a bug in mmap.mmap.flush() where calling
- with only an offset parameter would fail.
- - gh-138044: Remove compatibility shim for deprecated
- parameter package in importlib.resources.files(). Patch by
- Semyon Moroz.
- - gh-86819: socket: Add missing constants for ISO-TP sockets.
- - gh-137884: Add threading.get_native_id() support for
- Illumos/Solaris. Patch by Yüce Tekol.
- - gh-134869: Fix an issue where pressing Ctrl+C during tab
- completion in the REPL would leave the autocompletion menu
- in a corrupted state.
- - gh-137840: typing.TypedDict now supports the closed and
- extra_items keyword arguments (as described in PEP 728) to
- control whether additional non-required keys are allowed
- and to specify their value type.
- - gh-132947: Applied changes to importlib.metadata from
- importlib_metadata 8.7, including dist now disallowed
- for EntryPoints.select; deferred imports for faster
- import times; added support for metadata with newlines
- (python/cpython#119650); and metadata() function now
- returns None when a metadata directory is present but no
- metadata is present.
- - gh-90548: Fix musl detection for platform.libc_ver() on
- Alpine Linux if compiled with –strip-all.
- - gh-137317: inspect.signature() now correctly handles
- classes that use a descriptor on a wrapped __init__() or
- __new__() method. Contributed by Yongyu Yan.
- - gh-137754: Fix import of the zoneinfo module if the C
- implementation of the datetime module is not available.
- - gh-125854: Improve error messages for invalid category in
- warnings.warn().
- - gh-137729: locale.setlocale() now supports language codes
- with @-modifiers. @-modifier are no longer silently removed
- in locale.getlocale(), but included in the language code.
- - gh-73487: Speedup processing arguments (up to 1.5x) in
- the decimal module methods, that now using METH_FASTCALL
- calling convention. Patch by Sergey B Kirpichev.
- - gh-137634: Calendar pages generated by the
- calendar.HTMLCalendar class now support dark mode and
- have been migrated to the HTML5 standard for improved
- accessibility.
- - gh-137630: The _interpreters module now uses Argument
- Clinic to parse arguments. Patch by Adam Turner.
- - gh-137583: Fix a deadlock introduced in 3.13.6 when a call
- to ssl.SSLSocket.recv was blocked in one thread, and then
- another method on the object (such as ssl.SSLSocket.send)
- was subsequently called in another thread.
- - gh-92936: Update regex used by http.cookies.SimpleCookie to
- handle values containing double quotes.
- - gh-137426: Remove the code deprecation of
- importlib.abc.ResourceLoader. It is documented as
- deprecated, but left for backwards compatibility with other
- classes in importlib.abc.
- - gh-137490: Handle ECANCELED in the same way as EINTR in
- signal.sigwaitinfo() on NetBSD.
- - gh-137512: Add new constants in the resource module:
- RLIMIT_NTHR, RLIMIT_UMTXP, RLIMIT_PIPEBUF, RLIMIT_THREADS,
- RLIM_SAVED_CUR, and RLIM_SAVED_MAX.
- - gh-137044: resource.RLIM_INFINITY is now always a positive
- integer. On all supported platforms, it is larger than any
- limited resource value, which simplifies comparison of the
- resource values. Previously, it could be negative, such as
- -1 or -3, depending on platform.
- - gh-137477: Fix inspect.getblock(), inspect.getsourcelines()
- and inspect.getsource() for generator expressions.
- - gh-137481: Calendar uses the lengths of the locale’s
- weekdays to decide if the width requires abbreviation.
- - gh-137466: Remove undocumented glob.glob0() and
- glob.glob1() functions, which have been deprecated since
- Python 3.13. Use glob.glob() and pass a directory to its
- root_dir argument instead.
- - gh-137044: Return large limit values as positive integers
- instead of negative integers in resource.getrlimit().
- Accept large values and reject negative values (except
- RLIM_INFINITY) for limits in resource.setrlimit().
- - gh-115766: Fix ipaddress.IPv4Interface.is_unspecified.
- - gh-75989: tarfile.TarFile.extractall() and
- tarfile.TarFile.extract() now overwrite symlinks when
- extracting hardlinks. (Contributed by Alexander Enrique
- Urieles Nieto in gh-75989.)
- - gh-137017: Fix threading.Thread.is_alive to remain True
- until the underlying OS thread is fully cleaned up. This
- avoids false negatives in edge cases involving thread
- monitoring or premature threading.Thread.is_alive calls.
- - gh-137273: Fix debug assertion failure in
- locale.setlocale() on Windows.
- - gh-137191: Fix how type parameters are collected, when
- typing.Protocol are specified with explicit parameters.
- Now, typing.Generic and typing.Protocol always dictate the
- parameter number and parameter ordering of types. Previous
- behavior was a bug.
- - gh-137282: Fix tab completion and dir() on
- concurrent.futures.
- - gh-137257: Bump the version of pip bundled in ensurepip to
- version 25.2
- - gh-137239: heapq: Update heapq.__all__ with *_max
- functions.
- - gh-124503: ast.literal_eval() is 10-20% faster for small
- inputs.
- - gh-137226: Fix behavior of
- annotationlib.ForwardRef.evaluate() when the type_params
- parameter is passed and the name of a type param is also
- present in an enclosing scope.
- - gh-137197: SSLContext objects can now set TLS 1.3 cipher
- suites via set_ciphersuites().
- - gh-81325: tarfile.TarFile now accepts a path-like when
- working on a tar archive. (Contributed by Alexander Enrique
- Urieles Nieto in gh-81325.)
- - gh-137185: Fix a potential async-signal-safety issue in
- faulthandler when printing C stack traces.
- - gh-133951: Remove lib64-lib symlink creation when creating
- new virtual environments in venv module
- - gh-130522: Fix unraisable TypeError raised during
- interpreter shutdown in the threading module.
- - gh-137059: Fix handling of file URLs with a
- Windows drive letter in the URL authority by
- urllib.request.url2pathname(). This fixes a regression in
- earlier pre-releases of Python 3.14.
- - gh-136980: Remove unused C tracing code in bdb for event
- type c_call, c_return and c_exception
- - gh-130577: tarfile now validates archives to ensure member
- offsets are non-negative. (Contributed by Alexander Enrique
- Urieles Nieto in gh-130577.)
- - gh-136170: Removed the unreleased
- zipfile.ZipFile.data_offset property added in 3.14.0a7 as
- it wasn’t fully clear which behavior it should have in some
- situations so the result was not always what a user might
- expect.
- - gh-121237: Support %:z directive for
- datetime.datetime.strptime(), datetime.time.strptime() and
- time.strptime(). Patch by Lucas Esposito and Semyon Moroz.
- - gh-136929: Ensure that hash functions guaranteed to be
- always available exist as attributes of hashlib even if
- they will not work at runtime due to missing backend
- implementations. For instance, hashlib.md5 will no longer
- raise AttributeError if OpenSSL is not available and Python
- has been built without MD5 support. Patch by Bénédikt Tran.
- - gh-124621: pyrepl now works in Emscripten.
- - gh-136914: Fix retrieval of doctest.DocTest.lineno
- for objects decorated with functools.cache() or
- functools.cached_property.
- - gh-136912: hmac.digest() now properly handles large
- keys and messages by falling back to the pure Python
- implementation when necessary. Patch by Bénédikt Tran.
- - gh-83424: Allows creating a ctypes.CDLL without name when
- passing a handle as an argument.
- - gh-135228: When dataclasses replaces a class with a slotted
- dataclass, the original class can now be garbage collected
- again. Earlier changes in Python 3.14 caused this class to
- always remain in existence together with the replacement
- class synthesized by dataclasses.
- - gh-136874: Discard URL query and fragment in
- urllib.request.url2pathname().
- - gh-136787: hashlib: improve exception messages when a
- hash algorithm is not recognized, blocked by the current
- security policy or incompatible with the desired operation
- (for instance, using HMAC with SHAKE). Patch by Bénédikt
- Tran.
- - gh-130645: Enable color help by default in argparse.
- - gh-131724: In http.client, a new max_response_headers
- keyword-only parameter has been added to HTTPConnection
- and HTTPSConnection constructors. This parameter sets the
- maximum number of allowed response headers, helping to
- prevent denial-of-service attacks.
- - gh-135427: With -Werror, the DeprecationWarning emitted
- by os.fork() and os.forkpty() in mutli-threaded processes
- is now raised as an exception. Previously it was silently
- ignored. Patch by Rani Pinchuk.
- - gh-136234: Fix asyncio.WriteTransport.writelines() to be
- robust to connection failure, by using the same behavior as
- write().
- - gh-53144: encodings.aliases: Add latin_N aliases
- - gh-136669: _asyncio is now statically linked for improved
- performance.
- - gh-136134: SMTP.auth_cram_md5() now raises an SMTPException
- instead of a ValueError if Python has been built without
- MD5 support. In particular, SMTP clients will not attempt
- to use this method even if the remote server is assumed to
- support it. Patch by Bénédikt Tran.
- - gh-136134: IMAP4.login_cram_md5 now raises an IMAP4.error
- if CRAM-MD5 authentication is not supported. Patch by
- Bénédikt Tran.
- - gh-136591: _hashlib: avoid using deprecated functions
- ERR_func_error_string and EVP_MD_CTX_md when using OpenSSL
- 3.0 and later. Patch by Bénédikt Tran.
- - gh-136571: datetime.date.fromisocalendar() can now raise
- OverflowError for out of range arguments.
- - gh-136549: Fix signature of threading.excepthook().
- - gh-136492: Expose PEP 667’s FrameLocalsProxyType in the
- types module.
- - gh-83336: utf8_sig is now aliased to encodings.utf_8_sig
- - gh-136523: Fix wave.Wave_write emitting an unraisable when
- open raises.
- - gh-136507: Fix mimetypes CLI to handle multiple file
- parameters.
- - gh-52876: Add missing keepends (default True)
- parameter to codecs.StreamReaderWriter.readline() and
- codecs.StreamReaderWriter.readlines().
- - gh-136470: Correct
- concurrent.futures.InterpreterPoolExecutor’s default thread
- name.
- - gh-136476: Fix a bug that was causing the
- get_async_stack_trace function to miss some frames in the
- stack trace.
- - gh-136434: Fix docs generation of UnboundItem in
- concurrent.interpreters when running with -OO.
- - gh-136380: Raises AttributeError when accessing
- concurrent.futures.InterpreterPoolExecutor and
- subinterpreters are not available.
- - gh-72327: Suggest using the system command prompt when pip
- install is typed into the REPL. Patch by Tom Viner, Richard
- Si, and Brian Schubert.
- - gh-135953: Implement a new high-frequency runtime
- profiler that leverages the existing remote debugging
- functionality to collect detailed execution statistics
- from running Python processes. This tool is exposed in the
- profile.sample module and enables non-intrusive observation
- of production applications by attaching to already-running
- processes without requiring any code modifications,
- restarts, or special startup flags. The observer can
- perform extremely high-frequency sampling of stack traces
- and interpreter state, providing detailed runtime execution
- analysis of live applications.
- - gh-136021: Make type_params parameter required in
- typing._eval_type() after a deprecation period
- for not providing this parameter. Also remove the
- DeprecationWarning for the old behavior.
- - gh-136286: Fix pickling failures for protocols 0 and 1 for
- many objects related to subinterpreters.
- - gh-136047: Fix issues with typing when the C implementation
- of abc is not available.
- - gh-136316: Improve support for evaluating nested forward
- references in typing.evaluate_forward_ref().
- - gh-136306: ssl can now get and set groups used for key
- agreement.
- - gh-136156: tempfile.TemporaryFile() no longer uses
- os.O_EXCL with os.O_TMPFILE, so it’s possible to use
- linkat() on the file descriptor. Patch by Victor Stinner.
- - gh-133982: Update Python implementation of io.BytesIO to be
- thread safe.
- - gh-136193: Improve TypeError error message, when
- richcomparing two types.SimpleNamespace objects.
- - gh-136097: Fix potential infinite recursion and KeyError in
- sysconfig --generate-posix-vars.
- - gh-85702: If zoneinfo._common.load_tzdata is given a
- package without a resource a zoneinfo.ZoneInfoNotFoundError
- is raised rather than a PermissionError. Patch by Victor
- Stinner.
- - gh-90733: Improve error messages when reporting invalid
- parameters in hashlib.scrypt(). Patch by Bénédikt Tran.
- - gh-134759: Fix UnboundLocalError in
- email.message.Message.get_payload() when the payload to
- decode is a bytes object. Patch by Kliment Lamonov.
- - gh-136028: Fix parsing month names containing “İ” (U+0130,
- LATIN CAPITAL LETTER I WITH DOT ABOVE) in time.strptime().
- This affects locales az_AZ, ber_DZ, ber_MA and crh_UA.
- - gh-87135: Acquiring a threading.Lock or threading.RLock at
- interpreter shutdown will raise PythonFinalizationError if
- Python can determine that it would otherwise deadlock.
- - gh-135995: In the palmos encoding, make byte 0x9b decode to
- › (U+203A - SINGLE RIGHT-POINTING ANGLE QUOTATION MARK).
- - gh-105456: Removed sre_compile, sre_constants and sre_parse
- modules.
- - gh-53203: Fix time.strptime() for %c and %x formats on
- locales byn_ER, wal_ET and lzh_TW, and for %X format on
- locales ar_SA, bg_BG and lzh_TW.
- - gh-135878: Fixes a crash of types.SimpleNamespace on free
- threading builds, when several threads were calling its
- __repr__() method at the same time.
- - gh-135853: Add math.fmax() and math.fmin() to get the
- larger and smaller of two floating-point values. Patch by
- Bénédikt Tran.
- - gh-135836: Fix IndexError in
- asyncio.loop.create_connection() that could occur when
- non-OSError exception is raised during connection and
- socket’s close() raises OSError.
- - gh-135853: math: expose C99 signbit() function to determine
- whether the sign bit of a floating-point value is set.
- Patch by Bénédikt Tran.
- - gh-134531: hmac: use the EVP_MAC(3ssl) interface for HMAC
- when Python is built with OpenSSL 3.0 and later instead of
- the deprecated HMAC_CTX(3ssl) interface. Patch by Bénédikt
- Tran.
- - gh-135836: Fix IndexError in
- asyncio.loop.create_connection() that could occur when the
- Happy Eyeballs algorithm resulted in an empty exceptions
- list during connection attempts.
- - gh-135855: Raise TypeError instead of SystemError when
- _interpreters.set___main___attrs() is passed a non-dict
- object. Patch by Brian Schubert.
- - gh-135823: netrc: improve the error message when
- the security check for the ownership of the default
- configuration file ~/.netrc fails. Patch by Bénédikt Tran.
- - gh-135815: netrc: skip security checks if os.getuid() is
- missing. Patch by Bénédikt Tran.
- - gh-135640: Address bug where it was possible to call
- xml.etree.ElementTree.ElementTree.write() on an ElementTree
- object with an invalid root element. This behavior blanked
- the file passed to write if it already existed.
- - gh-90117: Speed up pprint for list and tuple.
- - gh-135759: hashlib: reject negative digest lengths in
- OpenSSL-based SHAKE objects by raising a ValueError.
- Previously, negative lengths were implicitly rejected by
- raising a MemoryError or a SystemError. Patch by Bénédikt
- Tran.
- - gh-123471: Make concurrent iterations over itertools.chain
- safe under free threading.
- - gh-135645: Added supports_isolated_interpreters field to
- sys.implementation.
- - gh-135646: Raise consistent NameError exceptions in
- annotationlib.ForwardRef.evaluate()
- - gh-135557: Fix races on heapq updates and list reads on the
- free threaded build.
- - gh-119180: Only fetch globals and locals if necessary in
- annotationlib.get_annotations()
- - gh-135561: Fix a crash on DEBUG builds when an HACL* HMAC
- routine fails. Patch by Bénédikt Tran.
- - gh-135386: Fix opening a dbm.sqlite3 database for reading
- from read-only file or directory.
- - gh-135444: Fix asyncio.DatagramTransport.sendto() to
- account for datagram header size when data cannot be sent.
- - gh-65697: configparser’s error message when attempting to
- write an invalid key is now more helpful.
- - gh-135497: Fix os.getlogin() failing for longer usernames
- on BSD-based platforms.
- - gh-135487: Fix reprlib.Repr.repr_int() when given integers
- with more than sys.get_int_max_str_digits() digits. Patch
- by Bénédikt Tran.
- - gh-135429: Fix the argument mismatch in _lsprof for
- PY_THROW event.
- - gh-135368: Fix unittest.mock.Mock generation on
- dataclasses.dataclass() objects. Now all special attributes
- are set as it was before gh-124429.
- - gh-135336: json now encodes strings up to 2.2x faster
- if they consist solely of characters that don’t require
- escaping.
- - gh-135335: multiprocessing: Flush stdout and stderr after
- preloading modules in the forkserver.
- - gh-126631: Fix multiprocessing forkserver bug which
- prevented __main__ from being preloaded.
- - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
- ‘en_US.UTF-8’.
- - gh-130870: Preserve types.GenericAlias subclasses in
- typing.get_type_hints()
- - gh-135321: Raise a correct exception for values greater
- than 0x7fffffff for the BINSTRING opcode in the C
- implementation of pickle.
- - gh-121914: Changed the names of the symbol tables for
- lambda expressions and generator expressions to “”
- and “” respectively to avoid conflicts with
- user-defined names.
- - gh-135276: Synchronized zipfile.Path with zipp 3.23,
- including improved performance of zipfile.Path.open() for
- non-reading modes, rely on functools.cached_property() to
- cache values on the instance. Rely on save_method_args to
- save the initialization method arguments. Fixed .name,
- .stem and other basename-based properties on Windows when
- working with a zipfile on disk.
- - gh-135234: hashlib: improve exception messages when an
- OpenSSL function failed. When memory allocation fails
- on OpenSSL’s side, a MemoryError is raised instead of a
- ValueError. Patch by Bénédikt Tran.
- - gh-135244: uuid: when the MAC address cannot be
- determined, the 48-bit node ID is now generated with a
- cryptographically-secure pseudo-random number generator
- (CSPRNG) as per RFC 9562, §6.10.3. This affects uuid1() and
- uuid6().
- - gh-135241: The INT opcode of the C accelerator _pickle
- module was updated to look only for “00” and “01” to push
- booleans onto the stack, aligning with the Python pickle
- module.
- - gh-133934: Improve sqlite3 CLI’s .help message.
- - gh-135069: Fix the “Invalid error handling” exception in
- encodings.idna.IncrementalDecoder to correctly replace the
- ‘errors’ parameter.
- - gh-130662: +Accept leading zeros in precision and width
- fields for +:class:Decimal formatting, for example
- format(Decimal(1.25), '.016f').
- - gh-130662: Accept leading zeros in precision and
- width fields for Fraction formatting, for example
- format(Fraction(1, 3), '.016f').
- - gh-135004: Rewrite and cleanup the internal _blake2 module.
- Some exception messages were changed but their types were
- left untouched. Patch by Bénédikt Tran.
- - gh-134953: Expand _colorize theme with keyword_constant and
- implement in repl.
- - gh-134978: hashlib: Supporting the string keyword parameter
- in hash function constructors such as new() or the direct
- hash-named constructors such as md5() and sha256() is now
- deprecated and slated for removal in Python 3.19. Prefer
- passing the initial data as a positional argument for
- maximum backwards compatibility. Patch by Bénédikt Tran.
- - gh-134970: Fix the “unknown action” exception in
- argparse.ArgumentParser.add_argument_group() to correctly
- replace the action class.
- - gh-134718: By default, omit optional Load() values in
- ast.dump().
- - gh-134718: ast.dump() now only omits None and [] values if
- they are default values.
- - gh-134939: Add the concurrent.interpreters module. See PEP
- 734.
- - gh-108885: Run each example as a subtest in unit
- tests synthesized by doctest.DocFileSuite()
- and doctest.DocTestSuite(). Add the
- doctest.DocTestRunner.report_skip() method.
- - gh-134885: Fix possible crash in the compression.zstd
- module related to setting parameter types. Patch by Jelle
- Zijlstra.
- - gh-134857: Improve error report for doctests run with
- unittest. Remove doctest module frames from tracebacks and
- redundant newline character from a failure message.
- - gh-128840: Fix parsing long IPv6 addresses with embedded
- IPv4 address.
- - gh-133579: curses: Consistently report failures of
- curses C API calls in module-level methods by raising
- a curses.error. This affects assume_default_colors(),
- baudrate(), cbreak(), echo(), longname(), initscr(), nl(),
- raw(), termattrs(), termname() and unctrl(). Patch by
- Bénédikt Tran.
- - gh-133579: curses.window.refresh() and
- curses.window.noutrefresh() now raise a TypeError instead
- of curses.error when called with an incorrect number of
- arguments for pads. Patch by Bénédikt Tran.
- - gh-133579: curses.window: Consistently report failures
- of curses C API calls in Window methods by raising a
- curses.error. This affects addch(), addnstr(), addstr(),
- border(), box(), chgat(), getbkgd(), inch(), insstr() and
- insnstr(). Patch by Bénédikt Tran.
- - gh-134771: The time_clockid_converter() function now
- selects correct type for clockid_t on Cygwin which fixes a
- build error.
- - gh-134637: Fix performance regression in calling a ctypes
- function pointer in free threading.
- - gh-134696: Built-in HACL* and OpenSSL implementations of
- hash function constructors now correctly accept the same
- documented named arguments. For instance, md5() could be
- previously invoked as md5(data=data) or md5(string=string)
- depending on the underlying implementation but these calls
- were not compatible. Patch by Bénédikt Tran.
- - gh-132710: If possible, ensure that uuid.getnode()
- returns the same result even across different processes.
- Previously, the result was constant only within the same
- process. Patch by Bénédikt Tran.
- - gh-134531: _hashlib: Rename internal C functions for
- _hashlib.HASH and _hashlib.HASHXOF objects. Patch by
- Bénédikt Tran.
- - gh-134698: Fix a crash when calling methods of
- ssl.SSLContext or ssl.SSLSocket across multiple threads.
- - gh-134151: email: Fix TypeError in
- email.utils.decode_params() when sorting RFC 2231
- continuations that contain an unnumbered section.
- - gh-134635: zlib: Allow to combine Adler-32 and CRC-32
- checksums via adler32_combine() and crc32_combine(). Patch
- by Callum Attryde and Bénédikt Tran.
- - gh-134657: asyncio: Remove some private names from
- asyncio.__all__.
- - gh-134210: curses.window.getch() now correctly handles
- signals. Patch by Bénédikt Tran.
- - gh-80334: multiprocessing.freeze_support() now checks for
- work on any “spawn” start method platform rather than only
- on Windows.
- - gh-134582: Fix tokenize.untokenize() round-trip errors
- related to t-strings braces escaping
- - gh-134580: Improved the styling of HTML diff pages
- generated by the difflib.HtmlDiff class, and migrated the
- output to the HTML5 standard.
- - gh-134565: unittest.doModuleCleanups() no longer swallows
- all but first exception raised in the cleanup code, but
- raises a ExceptionGroup if multiple errors occurred.
- - gh-134546: Ensure pdb remote debugging script is readable
- by remote Python process.
- - gh-134451: Converted asyncio.tools.CycleFoundException from
- dataclass to a regular exception type.
- - gh-114177: Fix asyncio to not close subprocess pipes which
- would otherwise error out when the event loop is already
- closed.
- - gh-90871: Fixed an off by one error concerning the backlog
- parameter in create_unix_server(). Contributed by Christian
- Harries.
- - gh-134323: Fix the threading.RLock.locked() method.
- - gh-86802: Fixed asyncio memory leak in cancelled shield
- tasks. For shielded tasks where the shield was cancelled,
- log potential exceptions through the exception handler.
- Contributed by Christian Harries.
- - gh-71189: Add support of the all-but-last mode in
- os.path.realpath().
- - gh-72902: Improve speed (x1.1-1.8) of the Fraction
- constructor for typical inputs (float’s, Decimal’s or
- strings).
- - gh-134209: curses: The curses.window.instr() and
- curses.window.getstr() methods now allocate their internal
- buffer on the heap instead of the stack; in addition, the
- max buffer size is increased from 1023 to 2047.
- - gh-88994: Change datetime.datetime.now()
- to half-even rounding for consistency with
- datetime.datetime.fromtimestamp(). Patch by John Keith
- Hohm.
- - gh-80184: The default queue size is now socket.SOMAXCONN
- for socketserver.TCPServer.
- - gh-132983: Add compression.zstd version information to
- test.pythoninfo.
- - gh-134235: Updated tab completion on REPL to include
- builtin modules. Contributed by Tom Wang, Hunter Young
- - gh-134152: Fixed UnboundLocalError that could occur during
- email header parsing if an expected trailing delimiter is
- missing in some contexts.
- - gh-134152: email: Fix parsing of email message ID with
- invalid domain.
- - gh-134168: http.server: Fix IPv6 address binding and
- --directory handling when using HTTPS.
- - gh-62184: Remove import of C implementation of io.FileIO
- from Python implementation which has its own implementation
- - gh-134087: Remove support for arbitrary positional
- or keyword arguments in the C implementation of
- threading.RLock objects. This was deprecated since Python
- 3.14. Patch by Bénédikt Tran.
- - gh-134173: Speed up asyncio performance of transferring
- state from thread pool concurrent.futures.Future by up to
- 4.4x. Patch by J. Nick Koston.
- - gh-133982: Emit RuntimeWarning in the Python implementation
- of io when the file-like object is not closed explicitly in
- the presence of multiple I/O layers.
- - gh-133890: The tarfile module now handles
- UnicodeEncodeError in the same way as OSError when cannot
- extract a member.
- - gh-134097: Fix interaction of the new REPL and -X
- showrefcount command line option.
- - gh-133889: The generated directory listing page in
- http.server.SimpleHTTPRequestHandler now only shows the
- decoded path component of the requested URL, and not the
- query and fragment.
- - gh-134098: Fix handling paths that end with
- a percent-encoded slash (%2f or %2F) in
- http.server.SimpleHTTPRequestHandler.
- - gh-132124: On POSIX-compliant systems,
- multiprocessing.util.get_temp_dir() now ignores TMPDIR
- (and similar environment variables) if the path length of
- AF_UNIX socket files exceeds the platform-specific maximum
- length when using the forkserver start method. Patch by
- Bénédikt Tran.
- - gh-134062: ipaddress: fix collisions in __hash__() for
- IPv4Network and IPv6Network objects.
- - gh-134004: shelve as well as underlying dbm.dumb and
- dbm.sqlite now have reorganize() methods to recover unused
- free space previously occupied by deleted entries.
- - gh-133970: Make string.templatelib.Template and
- string.templatelib.Interpolation generic.
- - gh-71253: Raise ValueError in open() if opener returns a
- negative file-descriptor in the Python implementation of io
- to match the C implementation.
- - gh-133960: Simplify and improve
- typing.evaluate_forward_ref(). It now no longer raises
- errors on certain invalid types. In several situations,
- it is now able to evaluate forward references that were
- previously unsupported.
- - gh-133925: Make the private class typing._UnionGenericAlias
- hashable.
- - gh-133604: Remove platform.java_ver() which was deprecated
- since Python 3.13.
- - gh-133875: Removed deprecated
- pathlib.PurePath.is_reserved(). Use os.path.isreserved() to
- detect reserved paths on Windows.
- - gh-133873: Remove the deprecated getmark(), setmark()
- and getmarkers() methods of the Wave_read and Wave_write
- classes, which were deprecated since Python 3.13. Patch by
- Bénédikt Tran.
- - gh-133866: Remove the undocumented function
- ctypes.SetPointerType(), which has been deprecated since
- Python 3.13. Patch by Bénédikt Tran.
- - gh-133823: Remove support for TD = TypedDict("TD")
- and TD = TypedDict("TD", None) calls for constructing
- typing.TypedDict objects with zero field. Patch by Bénédikt
- Tran.
- - gh-125996: Fix thread safety of collections.OrderedDict.
- Patch by Kumar Aditya.
- - gh-133817: Remove support for creating NamedTuple classes
- via the undocumented keyword argument syntax. Patch by
- Bénédikt Tran.
- - gh-133653: Fix argparse.ArgumentParser with the
- formatter_class argument. Fix TypeError when
- formatter_class is a custom subclass of HelpFormatter.
- Fix TypeError when formatter_class is not a subclass
- of HelpFormatter and non-standard prefix_char is used.
- Fix support of colorizing when formatter_class is not a
- subclass of HelpFormatter.
- - gh-133810: Remove http.server.CGIHTTPRequestHandler and
- --cgi flag from the python -m http.server command-line
- interface. They were deprecated in Python 3.13. Patch by
- Bénédikt Tran.
- - gh-132641: Fixed a race in functools.lru_cache() under
- free-threading.
- - gh-133783: Fix bug with applying copy.replace() to ast
- objects. Attributes that default to None were incorrectly
- treated as required for manually created AST nodes.
- - gh-133684: Fix bug where annotationlib.get_annotations()
- would return the wrong result for certain classes that are
- part of a class hierarchy where from __future__ import
- annotations is used.
- - gh-77057: Fix handling of invalid markup declarations in
- html.parser.HTMLParser.
- - gh-130328: Speedup pasting in PyREPL on Windows in a legacy
- console. Patch by Chris Eibl.
- - gh-133701: Fix bug where typing.TypedDict classes defined
- under from __future__ import annotations and inheriting
- from another TypedDict had an incorrect __annotations__
- attribute.
- - gh-133656: Remove deprecated
- zipimport.zipimporter.load_module(). Use
- zipimport.zipimporter.exec_module() instead.
- - gh-133722: Added a color option to difflib.unified_diff()
- that colors output similar to git diff.
- - gh-133489: random.getrandbits() can now generate more that
- 231 bits. random.randbytes() can now generate more that 256
- MiB.
- - gh-133595: Clean up sqlite3.Connection APIs. All parameters
- of sqlite3.connect() except database are now keyword-only.
- The first three parameters of methods create_function()
- and create_aggregate() are now positional-only.
- The first parameter of methods set_authorizer(),
- set_progress_handler() and set_trace_callback() is now
- positional-only.
- - gh-133581: Improve unparsing of t-strings in ast.unparse()
- and from __future__ import annotations. Empty t-strings now
- round-trip correctly and formatting in interpolations is
- preserved. Patch by Jelle Zijlstra.
- - gh-133577: Add parameter formatter to
- logging.basicConfig().
- - gh-92897: Removed the check_home parameter from
- sysconfig.is_python_build(), deprecated since Python 3.12.
- - gh-133551: Support t-strings (PEP 750) in annotationlib.
- Patch by Jelle Zijlstra.
- - gh-133517: Remove os.listdrives(), os.listvolumes() and
- os.listmounts() in non Windows desktop builds since the
- underlying functionality is missing.
- - gh-133439: Fix dot commands with trailing spaces are
- mistaken for multi-line SQL statements in the sqlite3
- command-line interface.
- - gh-133447: Add basic color to sqlite3 CLI interface.
- - gh-133253: Fix thread-safety issues in linecache.
- - gh-133390: Support keyword completion in the sqlite3
- command-line interface and add sqlite3.SQLITE_KEYWORDS
- constant.
- - gh-132493: Avoid accessing __annotations__ unnecessarily in
- inspect.signature().
- - gh-133017: Improve the error message of
- multiprocessing.sharedctypes.Array(),
- multiprocessing.sharedctypes.RawArray(),
- multiprocessing.sharedctypes.Value() and
- multiprocessing.sharedctypes.RawValue() when an invalid
- typecode is passed. Patch by Tomas Roun
- - gh-132813: Improve error messages for incorrect types and
- values of csv.Dialect attributes.
- - gh-132969: Prevent the ProcessPoolExecutor executor thread,
- which remains running when shutdown(wait=False), from
- attempting to adjust the pool’s worker processes after
- the object state has already been reset during shutdown.
- A combination of conditions, including a worker process
- having terminated abormally, resulted in an exception and
- a potential hang when the still-running executor thread
- attempted to replace dead workers within the pool.
- - gh-132876: ldexp() on Windows doesn’t round subnormal
- results before Windows 11, but should. Python’s
- math.ldexp() wrapper now does round them, so results may
- change slightly, in rare cases of very small results, on
- Windows versions before 11.
- - gh-133009: xml.etree.ElementTree: Fix a crash in
- Element.__deepcopy__ when the element is concurrently
- mutated. Patch by Bénédikt Tran.
- - gh-132908: Add math.isnormal() and math.issubnormal()
- functions. Patch by Sergey B Kirpichev.
- - gh-95380: fcntl.fcntl() and fcntl.ioctl(): Remove the 1024
- bytes limit on the size of not mutated bytes-like argument.
- - gh-122781: Fix %z directive in datetime.datetime.strptime()
- to allow for no provided offset as was documented.
- - gh-123471: Make concurrent iterations over
- itertools.combinations and itertools.product safe under
- free-threading.
- - gh-127081: Fix libc thread safety issues with dbm by
- performing stateful operations in critical sections.
- - gh-127081: Fix libc thread safety issues with os by
- replacing getlogin with getlogin_r re-entrant version.
- - gh-127081: Fix libc thread safety issues with pwd by
- locking access to getpwall.
- - gh-132551: Make io.BytesIO safe in free-threaded build.
- - gh-107583: Fix Flag inversion when flag set has missing
- values (IntFlag still flips all bits); fix negative
- assigned values during flag creation (both Flag and IntFlag
- ignore missing values).
- - gh-87790: Support underscore and comma as thousands
- separators in the fractional part for Fraction’s
- formatting. Patch by Sergey B Kirpichev.
- - gh-87790: Support underscore and comma as thousands
- separators in the fractional part for Decimal’s formatting.
- Patch by Sergey B Kirpichev.
- - gh-131884: Fix formatting issues in json.dump() when both
- indent and skipkeys are used.
- - gh-131788: Make ResourceTracker.send from multiprocessing
- re-entrant safe
- - gh-91349: Adjust default compressionlevel= to 6 (down from
- 9) in gzip and tarfile. It is the default level used by
- most compression tools and a better tradeoff between speed
- and performance.
- - gh-131146: Fix calendar.TextCalendar,
- calendar.HTMLCalendar, and the calendar CLI
- to display month names in the nominative case
- by adding calendar.standalone_month_name and
- calendar.standalone_month_abbr, which provide month names
- and abbreviations in the grammatical form used when a month
- name stands by itself, if the locale supports it.
- - gh-123471: Make concurrent iterations over itertools.cycle
- safe under free-threading.
- - gh-130664: Handle corner-case for Fraction’s formatting:
- treat zero-padding (preceding the width field by a zero
- ('0') character) as an equivalent to a fill character of
- '0' with an alignment type of '=', just as in case of
- float’s.
- - gh-130999: Avoid exiting the new REPL and offer suggestions
- even if there are non-string candidates when errors occur.
- - gh-88473: Implement a fast path for datetime.date objects
- in datetime.date.today() which results in a 5x performance
- gain while proper subclasses retain their previous
- performance.
- - gh-126883: Add check that timezone fields are in
- range for datetime.datetime.fromisoformat() and
- datetime.time.fromisoformat(). Patch by Semyon Moroz.
- - gh-125028: functools.Placeholder cannot be passed to
- functools.partial() as a keyword argument.
- - gh-125843: If possible, indicate which curses C function or
- macro is responsible for raising a curses.error exception.
- Patch by Bénédikt Tran.
- - gh-119109: functools.partial() calls are now faster when
- keyword arguments are used.
- - gh-124033: SimplePath is now presented in
- importlib.metadata.__all__.
- - gh-91216: importlib.metadata now raises a KeyError instead
- of returning None when a key is missing from the metadata.
- - gh-120492: importlib.metadata now prioritizes valid dists
- to invalid dists when retrieving by name.
- - gh-99631: The shelve module now accepts custom
- serialization and deserialization functions.
- - gh-119186: Slightly speed up os.walk() by calling
- os.path.join() less often.
- - gh-120170: Fix an issue in the _pickle extension module in
- which importing multiprocessing could change how pickle
- identifies which module an object belongs to, potentially
- breaking the unpickling of those objects.
- - gh-118981: Fix potential hang in
- multiprocessing.popen_spawn_posix that can happen when the
- child proc dies early by closing the child fds right away.
- - gh-105497: Fix flag mask inversion when unnamed flags
- exist.
- - gh-99813: ssl now uses SSL_sendfile internally when it is
- possible (see OP_ENABLE_KTLS). The function sends a file
- more efficiently because it performs TLS encryption in the
- kernel to avoid additional context switches. Patch by Illia
- Volochii.
- - gh-62824: Fix aliases for iso8859_8 encoding. Patch by Dave
- Goncalves.
- - gh-86155: html.parser.HTMLParser.close() no longer loses
- data when the