Ensure PyEval_GetGlobals() doesn't set an exception when returning NULL #91360
Copy link
Copy link
Open
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-featureA feature request or enhancementA feature request or enhancement
Description
| BPO | 47204 |
|---|---|
| Nosy | @ncoghlan |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = 'https://github.com/ncoghlan'
closed_at = None
created_at = <Date 2022-04-03.06:41:46.197>
labels = ['type-feature']
title = "Ensure PyEval_GetGlobals() doesn't set an exception when returning NULL"
updated_at = <Date 2022-04-03.06:48:44.524>
user = 'https://github.com/ncoghlan'bugs.python.org fields:
activity = <Date 2022-04-03.06:48:44.524>
actor = 'ncoghlan'
assignee = 'ncoghlan'
closed = False
closed_date = None
closer = None
components = []
creation = <Date 2022-04-03.06:41:46.197>
creator = 'ncoghlan'
dependencies = []
files = []
hgrepos = []
issue_num = 47204
keywords = []
message_count = 2.0
messages = ['416611', '416612']
nosy_count = 1.0
nosy_names = ['ncoghlan']
pr_nums = []
priority = 'normal'
resolution = None
stage = 'test needed'
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue47204'
versions = []Metadata
Metadata
Assignees
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-featureA feature request or enhancementA feature request or enhancement
Activity
ncoghlan commentedon Apr 3, 2022
While working on the first PR for bpo-44800 I provoked an obscure failure in PyImport_ImportModule by making PyEval_GetGlobals set an exception when returning NULL (as PyEval_GetLocals has done since bpo-18408 was implemented for Python 3.4).
This ticket covers adding an embedding test case that:
There's an option to slightly change the behaviour of
PyEval_GetLocals()to NOT set an exception in the "no Python frame" case, and instead only set the error when there is a Python frame, but something goes wrong when attempting to access the fast locals array (such as a memory allocation failure).ncoghlan commentedon Apr 3, 2022
Core dev forum thread for the C API question: https://discuss.python.org/t/subtle-c-api-discrepancy-pyeval-getlocals-vs-pyeval-getglobals-with-no-python-frame/14797