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 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