Skip to content

Commit 860480f

Browse files
generatedunixname1734921407115435meta-codesync[bot]
authored andcommitted
Import CPython 3.14.5+ stable branch (2026-05-17)
Summary: Imported python/cpython `3.14.5+` from upstream rev [`dc86a1b`](https://www.github.com/python/cpython/commit/dc86a1bdf3364a25f70452d2f7e52d9aae7d56e5) (committed 2026-05-17 10:35:27+00:00). # Commit Info Base: (`3.14.5+`) - [`9ad8a1b`](https://www.github.com/python/cpython/commit/9ad8a1b955033ebbf05456de2cfad85d1de2503d) (commit date: 2026-05-15 17:12:48+00:00) Imported: (`3.14.5+`) - [`dc86a1b`](https://www.github.com/python/cpython/commit/dc86a1bdf3364a25f70452d2f7e52d9aae7d56e5) (commit date: 2026-05-17 10:35:27+00:00) # Noteworthy file changes - Test files (1 added) - Low-signal files (5 added) (NEWS.d, docs, .github) Complete list of added/removed files: https://www.internalfb.com/intern/everpaste/?color=0&handle=GO5-0ib4zc6gIdIHACjxd4d8G8l9br0LAAAz Reviewed By: itamaro Differential Revision: D105501013 fbshipit-source-id: 346a1a4c5e6692ffbca864ccab794eb088eebe90
1 parent 1a85c62 commit 860480f

19 files changed

Lines changed: 86 additions & 29 deletions

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ jobs:
423423
needs: build-context
424424
if: needs.build-context.outputs.run-ubuntu == 'true'
425425
env:
426-
OPENSSL_VER: 3.0.20
426+
OPENSSL_VER: 3.5.6
427427
PYTHONSTRICTEXTENSIONBUILD: 1
428428
steps:
429429
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -531,7 +531,7 @@ jobs:
531531
matrix:
532532
os: [ubuntu-24.04]
533533
env:
534-
OPENSSL_VER: 3.0.20
534+
OPENSSL_VER: 3.5.6
535535
PYTHONSTRICTEXTENSIONBUILD: 1
536536
ASAN_OPTIONS: detect_leaks=0:allocator_may_return_null=1:handle_segv=0
537537
steps:

.github/workflows/reusable-ubuntu.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
runs-on: ${{ inputs.os }}
3131
timeout-minutes: 60
3232
env:
33-
OPENSSL_VER: 3.0.20
33+
OPENSSL_VER: 3.5.6
3434
PYTHONSTRICTEXTENSIONBUILD: 1
3535
TERM: linux
3636
steps:

Android/android.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def unpack_deps(host, prefix_dir, cache_dir):
216216
for name_ver in [
217217
"bzip2-1.0.8-3",
218218
"libffi-3.4.4-3",
219-
"openssl-3.0.20-0",
219+
"openssl-3.5.6-0",
220220
"sqlite-3.50.4-0",
221221
"xz-5.4.6-1",
222222
"zstd-1.5.7-2"

Apple/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ def unpack_deps(
319319
for name_ver in [
320320
"BZip2-1.0.8-2",
321321
"libFFI-3.4.7-2",
322-
"OpenSSL-3.0.20-1",
322+
"OpenSSL-3.5.6-1",
323323
"XZ-5.6.4-2",
324324
"mpdecimal-4.0.0-2",
325325
"zstd-1.5.7-1",

Lib/test/test_email/test_email.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4994,15 +4994,8 @@ def test_body_encode(self):
49944994
# Try the convert argument, where input codec != output codec
49954995
c = Charset('euc-jp')
49964996
# With apologies to Tokio Kikuchi ;)
4997-
# XXX FIXME
4998-
## try:
4999-
## eq('\x1b$B5FCO;~IW\x1b(B',
5000-
## c.body_encode('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7'))
5001-
## eq('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7',
5002-
## c.body_encode('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7', False))
5003-
## except LookupError:
5004-
## # We probably don't have the Japanese codecs installed
5005-
## pass
4997+
eq('\x1b$B5FCO;~IW\x1b(B',
4998+
c.body_encode('\u83ca\u5730\u6642\u592b'))
50064999
# Testing SF bug #625509, which we have to fake, since there are no
50075000
# built-in encodings where the header encoding is QP but the body
50085001
# encoding is not.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import pickle
2+
import threading
3+
import unittest
4+
5+
from test.support import threading_helper
6+
7+
8+
@threading_helper.requires_working_threading()
9+
class TestPickleFreeThreading(unittest.TestCase):
10+
11+
def test_pickle_dumps_with_concurrent_dict_mutation(self):
12+
# gh-146452: Pickling a dict while another thread mutates it
13+
# used to segfault. batch_dict_exact() iterated dict items via
14+
# PyDict_Next() which returns borrowed references, and a
15+
# concurrent pop/replace could free the value before Py_INCREF
16+
# got to it.
17+
shared = {str(i): list(range(20)) for i in range(50)}
18+
19+
def dumper():
20+
for _ in range(1000):
21+
try:
22+
pickle.dumps(shared)
23+
except RuntimeError:
24+
# "dictionary changed size during iteration" is expected
25+
pass
26+
27+
def mutator():
28+
for j in range(1000):
29+
key = str(j % 50)
30+
shared[key] = list(range(j % 20))
31+
if j % 10 == 0:
32+
shared.pop(key, None)
33+
shared[key] = [j]
34+
35+
threads = []
36+
for _ in range(10):
37+
threads.append(threading.Thread(target=dumper))
38+
threads.append(threading.Thread(target=mutator))
39+
40+
with threading_helper.start_threads(threads):
41+
pass
42+
43+
if __name__ == "__main__":
44+
unittest.main()

Mac/BuildScript/build-installer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,9 @@ def library_recipes():
246246

247247
result.extend([
248248
dict(
249-
name="OpenSSL 3.0.20",
250-
url="https://github.com/openssl/openssl/releases/download/openssl-3.0.20/openssl-3.0.20.tar.gz",
251-
checksum='c80a01dfc70ece4dc21168932c37739042d404d46ccc81a5986dd75314ecda6f',
249+
name="OpenSSL 3.5.6",
250+
url="https://github.com/openssl/openssl/releases/download/openssl-3.5.6/openssl-3.5.6.tar.gz",
251+
checksum='deae7c80cba99c4b4f940ecadb3c3338b13cb77418409238e57d7f31f2a3b736',
252252
buildrecipe=build_universal_openssl,
253253
configure=None,
254254
install=None,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Updated bundled version of OpenSSL on iOS and Android to 3.5.6.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix segfault in :mod:`pickle` when pickling a dictionary concurrently
2+
mutated by another thread in the free-threaded build.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix reference leaks in error paths of the :mod:`!_interpchannels` and
2+
:mod:`!_interpqueues` extension modules.

0 commit comments

Comments
 (0)