Repository navigation
fix: raise instead of aborting when instantiating pybind11_object - #6244
Open
kroplabeskidu wants to merge 1 commit into
Open
kroplabeskidu wants to merge 1 commit into
kroplabeskidu wants to merge 1 commit into
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Item 11 from #6159. Calling
pybind11_object()from Python, or a Python subclass of it with no registered C++ base, aborts the process because a C++ exception reaches the interpreter through theextern "C"tp_new:pybind11_object_newnow turns exceptions into Python errors, so this case raisesTypeError.make_new_instancechecks thetp_allocresult, and releases the object ifallocate_layout()throws.clear_instancenow uses thevalues_and_holders(PyObject *)constructor, which gives an empty iteration for a type with no registered base. Without this, releasing the object segfaulted in a release build, and the iterator has an assert for this case in debug builds.The new test aborts the test process without this fix. I ran it in both release and debug builds.
Suggested changelog entry:
pybind11_objectfrom Python now raisesTypeErrorinstead of aborting the process.