Unverified Commit 3abadbb2 by Victor M. Alvarez Committed by GitHub

Fix segfault in Python 3.12b4 (#238)

In `flo_read` and `flo_write` there were calls to `Py_DECREF` after releasing the GIL.

Closes #237
parent 0030658c
......@@ -1394,29 +1394,28 @@ static size_t flo_read(
PyObject* bytes = PyObject_CallMethod(
(PyObject*) user_data, "read", "n", (Py_ssize_t) size);
PyGILState_Release(gil_state);
if (bytes != NULL)
if (bytes == NULL)
{
Py_ssize_t len;
char* buffer;
int result = PyBytes_AsStringAndSize(bytes, &buffer, &len);
PyGILState_Release(gil_state);
return i;
}
if (result == -1 || (size_t) len < size)
{
Py_DECREF(bytes);
return i;
}
Py_ssize_t len;
char* buffer;
memcpy((char*) ptr + i * size, buffer, size);
int result = PyBytes_AsStringAndSize(bytes, &buffer, &len);
Py_DECREF(bytes);
}
else
if (result == -1 || (size_t) len < size)
{
Py_DECREF(bytes);
PyGILState_Release(gil_state);
return i;
}
memcpy((char*) ptr + i * size, buffer, size);
Py_DECREF(bytes);
PyGILState_Release(gil_state);
}
return count;
......@@ -1444,12 +1443,11 @@ static size_t flo_write(
(PyObject*) user_data, "write", "s#", (char*) ptr + i * size, size);
#endif
Py_XDECREF(result);
PyGILState_Release(gil_state);
if (result == NULL)
return i;
Py_DECREF(result);
}
return count;
......
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