mirror of
https://github.com/python/cpython.git
synced 2025-10-16 19:57:59 +00:00
bpo-47162: Add call trampoline to mitigate bad fpcasts on Emscripten (GH-32189)
This commit is contained in:
parent
795c00b91c
commit
581c4434de
8 changed files with 99 additions and 18 deletions
|
@ -527,7 +527,7 @@ import_find_extension(PyThreadState *tstate, PyObject *name,
|
|||
else {
|
||||
if (def->m_base.m_init == NULL)
|
||||
return NULL;
|
||||
mod = def->m_base.m_init();
|
||||
mod = _PyImport_InitFunc_TrampolineCall(def->m_base.m_init);
|
||||
if (mod == NULL)
|
||||
return NULL;
|
||||
if (PyObject_SetItem(modules, name, mod) == -1) {
|
||||
|
@ -958,6 +958,13 @@ PyImport_GetImporter(PyObject *path)
|
|||
return get_path_importer(tstate, path_importer_cache, path_hooks, path);
|
||||
}
|
||||
|
||||
#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)
|
||||
#include <emscripten.h>
|
||||
EM_JS(PyObject*, _PyImport_InitFunc_TrampolineCall, (PyModInitFunction func), {
|
||||
return wasmTable.get(func)();
|
||||
});
|
||||
#endif // __EMSCRIPTEN__ && PY_CALL_TRAMPOLINE
|
||||
|
||||
static PyObject*
|
||||
create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec)
|
||||
{
|
||||
|
@ -973,8 +980,7 @@ create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec)
|
|||
/* Cannot re-init internal module ("sys" or "builtins") */
|
||||
return PyImport_AddModuleObject(name);
|
||||
}
|
||||
|
||||
mod = (*p->initfunc)();
|
||||
mod = _PyImport_InitFunc_TrampolineCall(*p->initfunc);
|
||||
if (mod == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue