Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit eda70b8

Browse files
author
Daniel Stutzbach
committed
#11335: Fix memory leak after key function failure in sort
1 parent 0d5e52d commit eda70b8

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

Lib/test/test_sort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ def __repr__(self):
111111
s.sort(key=CmpToKey(lambda a, b: int(random.random() * 3) - 1))
112112
check("an insane function left some permutation", x, s)
113113

114+
if len(x) >= 2:
115+
def bad_key(x):
116+
raise RuntimeError
117+
s = x[:]
118+
self.assertRaises(RuntimeError, s.sort, key=bad_key)
119+
114120
x = [Complains(i) for i in x]
115121
s = x[:]
116122
random.shuffle(s)

Objects/listobject.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1944,6 +1944,8 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds)
19441944
if (keys[i] == NULL) {
19451945
for (i=i-1 ; i>=0 ; i--)
19461946
Py_DECREF(keys[i]);
1947+
if (keys != &ms.temparray[saved_ob_size+1])
1948+
PyMem_FREE(keys);
19471949
goto keyfunc_fail;
19481950
}
19491951
}

0 commit comments

Comments
 (0)