]> granicus.if.org Git - python/commitdiff
#11335: Fix memory leak after key function failure in sort
authorDaniel Stutzbach <daniel.stutzbach@google.com>
Wed, 4 May 2011 19:46:28 +0000 (12:46 -0700)
committerDaniel Stutzbach <daniel.stutzbach@google.com>
Wed, 4 May 2011 19:46:28 +0000 (12:46 -0700)
Lib/test/test_sort.py
Objects/listobject.c

index a7afe73d1c4a88c0a317e788a45d5cd75d2f5665..55503b57a80ed0b27b17d6bab23bc7537de26892 100644 (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)
index 18713abde11ab470583a29331a09a067ad986ec1..73624f0b7409632571c95b3f045682635fcee913 100644 (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;
             }
         }