fix(pymodule): improve safety of PyModule::from_code #4777
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.
If
PyImport_ExecCodeModuleEx
is called with an empty filename or module name, references to any Python variables defined in this context may break assumptions in standard library code.Notably, if
inspect.stack()
is called while any stack frame holds a reference to a variable declared in this Python snippet, andfile_name
is empty, theninspect.stack()
will throw while trying to resolve the file in which said variable was defined.The
exec
builtin handles this by defaultingfile_name
to<string>
andmodule_name
to<module>
- these are not the most obvious defaults, but in the spirit of consistency and providing pyo3 users with a safe API, it makes sense forPyModule::from_code
to do the same.Fixes #4769
Thank you for contributing to PyO3!
By submitting these contributions you agree for them to be dual-licensed under PyO3's MIT OR Apache-2.0 license.
Please consider adding the following to your pull request:
docs:
if this is a docs-only change to skip the checkPyO3's CI pipeline will check your pull request, thus make sure you have checked the
Contributing.md
guidelines. To run most of its testslocally, you can run
nox
. Seenox --list-sessions
for a list of supported actions.