Skip to content

_interpreters.set___main___attrs raises SystemError when passed a non-dict object #135855

Open
@brianschubert

Description

@brianschubert

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions