mirror of
https://github.com/python/cpython.git
synced 2025-07-09 20:35:26 +00:00
gh-104621: Check for Incompatible Extensions in import_find_extension() (gh-107184)
This fixes a bug where incompatible modules could still be imported if attempted multiple times.
This commit is contained in:
parent
b72947a8d2
commit
75c974f535
4 changed files with 50 additions and 16 deletions
|
@ -1215,6 +1215,15 @@ import_find_extension(PyThreadState *tstate, PyObject *name,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* It may have been successfully imported previously
|
||||
in an interpreter that allows legacy modules
|
||||
but is not allowed in the current interpreter. */
|
||||
const char *name_buf = PyUnicode_AsUTF8(name);
|
||||
assert(name_buf != NULL);
|
||||
if (_PyImport_CheckSubinterpIncompatibleExtensionAllowed(name_buf) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyObject *mod, *mdict;
|
||||
PyObject *modules = MODULES(tstate->interp);
|
||||
|
||||
|
@ -3704,16 +3713,8 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
|
|||
|
||||
PyThreadState *tstate = _PyThreadState_GET();
|
||||
mod = import_find_extension(tstate, name, path);
|
||||
if (mod != NULL) {
|
||||
const char *name_buf = PyUnicode_AsUTF8(name);
|
||||
assert(name_buf != NULL);
|
||||
if (_PyImport_CheckSubinterpIncompatibleExtensionAllowed(name_buf) < 0) {
|
||||
Py_DECREF(mod);
|
||||
mod = NULL;
|
||||
}
|
||||
goto finally;
|
||||
}
|
||||
else if (PyErr_Occurred()) {
|
||||
if (mod != NULL || _PyErr_Occurred(tstate)) {
|
||||
assert(mod == NULL || !_PyErr_Occurred(tstate));
|
||||
goto finally;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue