Fix refleak introduced by #10812.

This commit is contained in:
Ross Lagerwall 2011-03-19 09:11:14 +02:00
parent 952c0782b3
commit 9ad63e0914
1 changed files with 22 additions and 13 deletions

View File

@ -3827,16 +3827,19 @@ parse_arglist(PyObject* argv, Py_ssize_t *argc)
return NULL;
}
for (i = 0; i < *argc; i++) {
if (!fsconvert_strdup(PySequence_ITEM(argv, i),
&argvlist[i]))
{
*argc = i;
PyObject* item = PySequence_ITEM(argv, i);
if (item == NULL)
goto fail;
if (!fsconvert_strdup(item, &argvlist[i])) {
Py_DECREF(item);
goto fail;
}
Py_DECREF(item);
}
argvlist[*argc] = NULL;
return argvlist;
fail:
*argc = i;
free_string_array(argvlist, *argc);
return NULL;
}
@ -6177,22 +6180,28 @@ iov_setup(struct iovec **iov, Py_buffer **buf, PyObject *seq, int cnt, int type)
}
for (i = 0; i < cnt; i++) {
if (PyObject_GetBuffer(PySequence_GetItem(seq, i),
&(*buf)[i], type) == -1) {
PyMem_Del(*iov);
for (j = 0; j < i; j++) {
PyBuffer_Release(&(*buf)[j]);
}
PyMem_Del(*buf);
total = 0;
return total;
PyObject *item = PySequence_GetItem(seq, i);
if (item == NULL)
goto fail;
if (PyObject_GetBuffer(item, &(*buf)[i], type) == -1) {
Py_DECREF(item);
goto fail;
}
Py_DECREF(item);
(*iov)[i].iov_base = (*buf)[i].buf;
blen = (*buf)[i].len;
(*iov)[i].iov_len = blen;
total += blen;
}
return total;
fail:
PyMem_Del(*iov);
for (j = 0; j < i; j++) {
PyBuffer_Release(&(*buf)[j]);
}
PyMem_Del(*buf);
return 0;
}
static void