bpo-42979: Enhance abstract.c assertions checking slot result #24352
+126
−51
Conversation
|
Example which tries to mimick bpo-42979 by injecting
Injected bug:
|
Include/cpython/abstract.h
Outdated
| @@ -39,6 +39,12 @@ PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult( | |||
| PyObject *result, | |||
| const char *where); | |||
|
|
|||
| // Usage: assert(_Py_CheckSlotResult(obj, "__getitem__", result != NULL))); | |||
| PyAPI_FUNC(int) _Py_CheckSlotResult( | |||
markshannon
Jan 27, 2021
Contributor
Why an API function?
You know that you will regret it later 😉 https://www.python.org/dev/peps/pep-0620/
Why an API function?
You know that you will regret it later
vstinner
Jan 27, 2021
Author
Member
Oh, let me see that PEP... ah yes ;-) I wanted to define it close to _Py_CheckFunctionResult() definition, but you're right that it's a bad idea to export the symbol.
Oh, let me see that PEP... ah yes ;-) I wanted to define it close to _Py_CheckFunctionResult() definition, but you're right that it's a bad idea to export the symbol.
|
LGTM, apart from the API creep. |
Fixed: I moved the function definition to the internal C API. I also added an unit test. Note: this change has no impact on a release build (when Python is built with NDEBUG macro defined). |
Add _Py_CheckSlotResult() function which fails with a fatal error if a slot function succeeded with an exception set or failed with no exception set: write the slot name, the type name and the current exception (if an exception is set).
c9b8e9c
into
python:master
10 checks passed
10 checks passed
bedevere/news
"skip news" label found
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.
Add _Py_CheckSlotResult() function which fails with a fatal error if
a slot function succeeded with an exception set or failed with no
exception set: write the slot name, the type name and the current
exception (if an exception is set).
https://bugs.python.org/issue42979