Commit 098b1398 authored by stratakis's avatar stratakis Committed by Victor Stinner

bpo-36147: Fix a memory leak in ctypes s_get() (GH-12102)

The s_get() function leaks the result variable on low memory.
Partially backport commit 19b52545
to fix it.
parent b2aefd77
......@@ -1291,24 +1291,16 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
static PyObject *
s_get(void *ptr, Py_ssize_t size)
{
PyObject *result;
size_t slen;
Py_ssize_t i;
char *p;
result = PyString_FromString((char *)ptr);
if (!result)
return NULL;
/* chop off at the first NUL character, if any.
* On error, result will be deallocated and set to NULL.
*/
slen = strlen(PyString_AS_STRING(result));
size = min(size, (Py_ssize_t)slen);
if (result->ob_refcnt == 1) {
/* shorten the result */
_PyString_Resize(&result, size);
return result;
} else
/* cannot shorten the result */
return PyString_FromStringAndSize(ptr, size);
p = (char *)ptr;
for (i = 0; i < size; ++i) {
if (*p++ == '\0')
break;
}
return PyBytes_FromStringAndSize((char *)ptr, (Py_ssize_t)i);
}
static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment