cpython: c33e4881721f (original) (raw)
Mercurial > cpython
changeset 99283:c33e4881721f 2.7
Issue #19687: Fixed memory leak on failed Element slice assignment. [#19687]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Sun, 22 Nov 2015 12:31:11 +0200 |
parents | fd47601145dd |
children | de5582c569ff |
files | Modules/_elementtree.c |
diffstat | 1 files changed, 6 insertions(+), 10 deletions(-)[+] [-] Modules/_elementtree.c 16 |
line wrap: on
line diff
--- a/Modules/_elementtree.c +++ b/Modules/elementtree.c @@ -1390,15 +1390,17 @@ element_ass_subscr(PyObject* self, PyOb if (step != 1 && newlen != slicelen) {
Py_XDECREF(seq);[](#l1.7) PyErr_Format(PyExc_ValueError,[](#l1.8)
#if (PY_VERSION_HEX < 0x02050000) "attempt to assign sequence of size %d " "to extended slice of size %d",
(int)newlen, (int)slicelen[](#l1.12)
#else "attempt to assign sequence of size %zd " "to extended slice of size %zd",
newlen, slicelen[](#l1.16)
newlen, slicelen[](#l1.18) );[](#l1.19) return -1;[](#l1.20) }[](#l1.21)
@@ -1407,9 +1409,7 @@ element_ass_subscr(PyObject* self_, PyOb /* Resize before creating the recycle bin, to prevent refleaks. */ if (newlen > slicelen) { if (element_resize(self, newlen - slicelen) < 0) {
if (seq) {[](#l1.26)
Py_DECREF(seq);[](#l1.27)
}[](#l1.28)
Py_XDECREF(seq);[](#l1.29) return -1;[](#l1.30) }[](#l1.31) }[](#l1.32)
@@ -1420,9 +1420,7 @@ element_ass_subscr(PyObject* self_, PyOb we're done modifying the element */ recycle = PyList_New(slicelen); if (!recycle) {
if (seq) {[](#l1.37)
Py_DECREF(seq);[](#l1.38)
}[](#l1.39)
Py_XDECREF(seq);[](#l1.40) return -1;[](#l1.41) }[](#l1.42) for (cur = start, i = 0; i < slicelen;[](#l1.43)
@@ -1450,9 +1448,7 @@ element_ass_subscr(PyObject* self_, PyOb self->extra->length += newlen - slicelen;
if (seq) {[](#l1.48)
Py_DECREF(seq);[](#l1.49)
}[](#l1.50)
Py_XDECREF(seq);[](#l1.51)
/* discard the recycle bin, and everything in it */ Py_XDECREF(recycle);