summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2022-03-30 19:28:33 (GMT)
committerGitHub <noreply@github.com>2022-03-30 19:28:33 (GMT)
commit581c4434de62d9d36392f10e65866c081fb18d71 (patch)
tree8c7f01b8826e7f11bbe9a344612bb0187e2e4e8e /Python/import.c
parent795c00b91cbc208969302e9e16a269c2049af3e9 (diff)
downloadcpython-581c4434de62d9d36392f10e65866c081fb18d71.zip
cpython-581c4434de62d9d36392f10e65866c081fb18d71.tar.gz
cpython-581c4434de62d9d36392f10e65866c081fb18d71.tar.bz2
bpo-47162: Add call trampoline to mitigate bad fpcasts on Emscripten (GH-32189)
Diffstat (limited to 'Python/import.c')
-rw-r--r--Python/import.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Python/import.c b/Python/import.c
index 982ec8c..4b6d6d1 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -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;
}