Kaydet (Commit) ea370a9e authored tarafından Georg Brandl's avatar Georg Brandl

#6544: fix refleak in kqueue, occurring in certain error conditions.

üst 6ae19ade
......@@ -58,6 +58,9 @@ Library
Extension Modules
-----------------
- Issue #6544: fix a reference leak in the kqueue implementation's error
handling.
- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
msvcr100.dll is not a platform assembly anymore.
......
......@@ -1236,6 +1236,7 @@ static struct PyMemberDef kqueue_event_members[] = {
#undef KQ_OFF
static PyObject *
kqueue_event_repr(kqueue_event_Object *s)
{
char buf[1024];
......@@ -1521,19 +1522,6 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
return NULL;
}
if (ch != NULL && ch != Py_None) {
it = PyObject_GetIter(ch);
if (it == NULL) {
PyErr_SetString(PyExc_TypeError,
"changelist is not iterable");
return NULL;
}
nchanges = PyObject_Size(ch);
if (nchanges < 0) {
return NULL;
}
}
if (otimeout == Py_None || otimeout == NULL) {
ptimeoutspec = NULL;
}
......@@ -1569,11 +1557,22 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
return NULL;
}
if (nchanges) {
if (ch != NULL && ch != Py_None) {
it = PyObject_GetIter(ch);
if (it == NULL) {
PyErr_SetString(PyExc_TypeError,
"changelist is not iterable");
return NULL;
}
nchanges = PyObject_Size(ch);
if (nchanges < 0) {
goto error;
}
chl = PyMem_New(struct kevent, nchanges);
if (chl == NULL) {
PyErr_NoMemory();
return NULL;
goto error;
}
i = 0;
while ((ei = PyIter_Next(it)) != NULL) {
......@@ -1596,7 +1595,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
evl = PyMem_New(struct kevent, nevents);
if (evl == NULL) {
PyErr_NoMemory();
return NULL;
goto error;
}
}
......
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