diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2021-02-17 18:36:18 -0600 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2021-02-17 18:36:18 -0600 |
commit | c3bba91dc4ff682e139dc1f1ec4a355b0e5e9ac7 (patch) | |
tree | 467b0c6323fd6af6117ab82a3556b1c98c9aa9f9 /c | |
parent | 308df187874bc3661b6620b58f665ce41f236765 (diff) | |
download | cffi-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.c | 9 |
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: |