mirror of https://github.com/pyodide/pyodide.git
36 lines
1.2 KiB
Diff
36 lines
1.2 KiB
Diff
From 3f11694d7587e782530118d176306eeb6eebf5d1 Mon Sep 17 00:00:00 2001
|
|
From: Hood <hood@mit.edu>
|
|
Date: Wed, 23 Jun 2021 13:47:30 -0700
|
|
Subject: [PATCH] Don't dereference function pointer
|
|
|
|
Ctypes thinks that the result of dlsym is a pointer to the function pointer, so
|
|
it should call it like `result = (*f)(args)`. Probably this is true for the
|
|
native dlsym, but our dlsym returns an index into the indirect call table
|
|
"wasmTable", in particular it isn't even aligned like a pointer should be.
|
|
This patch fixes it so that it calls it like `result = f(args)` instead.
|
|
|
|
---
|
|
Modules/_ctypes/_ctypes.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
|
|
index ceae67e..44f2d76 100644
|
|
--- a/Modules/_ctypes/_ctypes.c
|
|
+++ b/Modules/_ctypes/_ctypes.c
|
|
@@ -771,7 +771,11 @@ CDataType_in_dll(PyObject *type, PyObject *args)
|
|
return NULL;
|
|
}
|
|
#endif
|
|
- return PyCData_AtAddress(type, address);
|
|
+ CDataObject *ob = (CDataObject *)GenericPyCData_new(type, NULL, NULL);
|
|
+ if (ob == NULL)
|
|
+ return NULL;
|
|
+ *(void **)ob->b_ptr = address;
|
|
+ return (PyObject*)ob;
|
|
}
|
|
|
|
static const char from_param_doc[] =
|
|
--
|
|
2.17.1
|
|
|