Skip to content

[BUG] Unchecked errors can potentially swallow signals/other exceptions #2862

Open
@virtuald

Description

@virtuald

Issue description

context

I'm trying to figure out why CTRL-C isn't working in my Linux application.

I'm periodically checking PyErr_CheckSignals in my inner loop in the main thread and it never seems to be firing -- but python is clearly seeing it at some point, as when I close the UI window the python code throws the KeyboardInterrupt and everything crashes because a thread tries to take the GIL during shutdown.

That is not what this issue is about, but it's useful context -- I'm sure I'm not doing something right, just need to figure out the right way to do it.

issue

However, in my search the following two links come up:

Basically, PyDict_Get/Set/Del can potentially swallow errors (including signals!) if the WithError variants aren't used. There are a few places in pybind11 where the less safe versions of these functions are used, which could be potentially contributing to my problem. It seems the WithError variants were introduced in Python 3, so to switch to these would require a Python 2.7 shim.

Has anyone else been contemplating this? There aren't that many places where errors aren't checked in pybind11, so it probably wouldn't be terrible to find them all and squash em. Ideally it would be nice if we could add some kind of linter to make sure nobody introduces such things in the future, but that seems hard.

Reproducible example code

N/A

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions