mirror of https://github.com/python/cpython
bpo-44608: Fix memory leak in _tkinter._flatten() (GH-27107)
if it is called with a sequence or set, but not list or tuple.
This commit is contained in:
parent
81989058de
commit
f572cbf1fa
|
@ -43,8 +43,14 @@ def get_tk_patchlevel():
|
||||||
class TkinterTest(unittest.TestCase):
|
class TkinterTest(unittest.TestCase):
|
||||||
|
|
||||||
def testFlattenLen(self):
|
def testFlattenLen(self):
|
||||||
# flatten(<object with no length>)
|
# Object without length.
|
||||||
self.assertRaises(TypeError, _tkinter._flatten, True)
|
self.assertRaises(TypeError, _tkinter._flatten, True)
|
||||||
|
# Object with length, but not sequence.
|
||||||
|
self.assertRaises(TypeError, _tkinter._flatten, {})
|
||||||
|
# Sequence or set, but not tuple or list.
|
||||||
|
# (issue44608: there were leaks in the following cases)
|
||||||
|
self.assertRaises(TypeError, _tkinter._flatten, 'string')
|
||||||
|
self.assertRaises(TypeError, _tkinter._flatten, {'set'})
|
||||||
|
|
||||||
|
|
||||||
class TclTest(unittest.TestCase):
|
class TclTest(unittest.TestCase):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix memory leak in :func:`_tkinter._flatten` if it is called with a sequence
|
||||||
|
or set, but not list or tuple.
|
|
@ -3197,8 +3197,10 @@ _tkinter__flatten(PyObject *module, PyObject *item)
|
||||||
|
|
||||||
context.size = 0;
|
context.size = 0;
|
||||||
|
|
||||||
if (!_flatten1(&context, item,0))
|
if (!_flatten1(&context, item, 0)) {
|
||||||
|
Py_XDECREF(context.tuple);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (_PyTuple_Resize(&context.tuple, context.size))
|
if (_PyTuple_Resize(&context.tuple, context.size))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue