#11335: Fix memory leak after key function failure in sort

This commit is contained in:
Daniel Stutzbach 2011-05-04 12:46:28 -07:00
parent 0d5e52d346
commit eda70b81d3
2 changed files with 8 additions and 0 deletions

View File

@ -111,6 +111,12 @@ class TestBase(unittest.TestCase):
s.sort(key=CmpToKey(lambda a, b: int(random.random() * 3) - 1))
check("an insane function left some permutation", x, s)
if len(x) >= 2:
def bad_key(x):
raise RuntimeError
s = x[:]
self.assertRaises(RuntimeError, s.sort, key=bad_key)
x = [Complains(i) for i in x]
s = x[:]
random.shuffle(s)

View File

@ -1944,6 +1944,8 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds)
if (keys[i] == NULL) {
for (i=i-1 ; i>=0 ; i--)
Py_DECREF(keys[i]);
if (keys != &ms.temparray[saved_ob_size+1])
PyMem_FREE(keys);
goto keyfunc_fail;
}
}