Bug report
Bug description:
This snippet:
import _interpreters import types i = _interpreters.create() _interpreters.set___main___attrs(i, types.MappingProxyType({"a": 1}))
raises:
Traceback (most recent call last): File "/home/brian/Projects/open-contrib/cpython/temp.py", line 27, in <module> _interpreters.set___main___attrs(i, types.MappingProxyType({"a": 1})) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SystemError: Objects/dictobject.c:4162: bad argument to internal function
This happens during this call to _PyXI_Enter which calls PyDict_Size on updates.
The public interface always passes a dict, and other paths that call _PyXI_Enter check for an actual dict (e.g., exec). I think it makes sense to do the same thing here. PR forthcoming.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-135855: Fix
SystemErrorwhen passing non-dict object to_interpreters.set___main___attrs#135856 - [3.14] gh-135855: Raise TypeError When Passing Non-dict Object to
_interpreters.set___main___attrs(gh-135856) #135900 - [3.13] gh-135855: Raise TypeError When Passing Non-dict Object to
_interpreters.set___main___attrs(gh-135856) #135903