summaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorSebastian Berg <sebastian@sipsolutions.net>2021-02-17 18:36:18 -0600
committerSebastian Berg <sebastian@sipsolutions.net>2021-02-17 18:36:18 -0600
commitc3bba91dc4ff682e139dc1f1ec4a355b0e5e9ac7 (patch)
tree467b0c6323fd6af6117ab82a3556b1c98c9aa9f9 /c
parent308df187874bc3661b6620b58f665ce41f236765 (diff)
downloadcffi-c3bba91dc4ff682e139dc1f1ec4a355b0e5e9ac7.tar.gz
BUG: Fix string memory leak in `b_do_dlopen`
When requesting a string with `es` or `et`, the string has to be freed with `PyMem_Free`. (https://docs.python.org/3/c-api/arg.html#strings-and-buffers)
Diffstat (limited to 'c')
-rw-r--r--c/_cffi_backend.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
index 23304d3..3d17b67 100644
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -4516,14 +4516,18 @@ static void *b_do_dlopen(PyObject *args, const char **p_printable_filename,
if (PyUnicode_Check(s))
{
s = PyUnicode_AsUTF8String(s);
- if (s == NULL)
+ if (s == NULL) {
+ PyMem_Free(filename_or_null);
return NULL;
+ }
*p_temp = s;
}
#endif
*p_printable_filename = PyText_AsUTF8(s);
- if (*p_printable_filename == NULL)
+ if (*p_printable_filename == NULL) {
+ PyMem_Free(filename_or_null);
return NULL;
+ }
}
if ((flags & (RTLD_NOW | RTLD_LAZY)) == 0)
flags |= RTLD_NOW;
@@ -4536,6 +4540,7 @@ static void *b_do_dlopen(PyObject *args, const char **p_printable_filename,
#endif
handle = dlopen(filename_or_null, flags);
+ PyMem_Free(filename_or_null);
#ifdef MS_WIN32
got_handle: