Skip to content

PyQt6 uses PySequence_Fast() which was removed from the limited C API 3.14 #130947

@vstinner

Description

@vstinner

Bug report

Bug description:

In the issue #91417 I removed PySequence_Fast(), commit 2ad069d:

Remove PySequence_Fast() from the limited C API. The function never worked with the limited C API. It was added by mistake.

Problem: PyQt6 uses the function! I propose to add back PySequence_Fast() to the limited C API.

PyQt6:

./qpy/QtOpenGL/qpyopengl_attribute_array.cpp:    values = PySequence_Fast(values, "an attribute array must be a sequence");
./qpy/QtOpenGL/qpyopengl_attribute_array.cpp:            itm = PySequence_Fast(itm,
./qpy/QtOpenGL/qpyopengl_uniform_value_array.cpp:    values = PySequence_Fast(values,
./qpy/QtOpenGL/qpyopengl_uniform_value_array.cpp:            itm = PySequence_Fast(itm,
./qpy/QtOpenGL/qpyopengl_value_array.cpp:    PyObject *seq = PySequence_Fast(values,

They reimplemented PySequence_Fast_GET_SIZE() and PySequence_Fast_GET_ITEM() macros which don't work with the limited C API:

// Replacements for the corresponding Python macros that use the limited API.
#define Sequence_Fast_Size(o) \
    (PyList_Check(o) ? PyList_Size(o) : PyTuple_Size(o))
#define Sequence_Fast_GetItem(o, i)\
    (PyList_Check(o) ? PyList_GetItem(o, i) : PyTuple_GetItem(o, i))

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.14bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions