You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Unpickler BUILD can traverse a concurrently mutated shared state dictionary #157124
The ordinary-state and slot-state loops in _pickle.load_build() traverse their state dictionary with PyDict_Next() without a critical section or owned snapshot. A reduction can supply an existing dictionary shared with other threads, so key-set changes can invalidate traversal and replacements can reclaim borrowed keys or values before assignment.
Observed Behavior
On a free-threaded build, ordinary-state mode terminates with SIGSEGV in about 0.23 seconds and slot-state mode in about 0.15 seconds. Both compatibility-GIL controls complete normally.
Affected Version
CPython 3.14.7 at commit 823f0323ee6ec1402088b73bce1a38473cac36dc, using the free-threaded build with PYTHON_GIL=0.
Reproduction
Run both modes:
PYTHON_GIL=0 python3.14t poc/reproduce.py 10 state
PYTHON_GIL=0 python3.14t poc/reproduce.py 10 slot
Activity
ZeroIntensity commentedon Sep 7, 2026
Thanks for fuzzing. This is currently coming off as spam; please consolidate your bugs into a single gist and create a single issue to track them.