[Python-checkins] cpython (2.7): Issue #19687: Fixed memory leak on failed Element slice assignment.
serhiy.storchaka
python-checkins at python.org
Sun Nov 22 05:31:44 EST 2015
https://hg.python.org/cpython/rev/c33e4881721f
changeset: 99283:c33e4881721f
branch: 2.7
parent: 99279:fd47601145dd
user: Serhiy Storchaka <storchaka at gmail.com>
date: Sun Nov 22 12:31:11 2015 +0200
summary:
Issue #19687: Fixed memory leak on failed Element slice assignment.
files:
Modules/_elementtree.c | 16 ++++++----------
1 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1390,15 +1390,17 @@
if (step != 1 && newlen != slicelen)
{
+ Py_XDECREF(seq);
PyErr_Format(PyExc_ValueError,
#if (PY_VERSION_HEX < 0x02050000)
"attempt to assign sequence of size %d "
"to extended slice of size %d",
+ (int)newlen, (int)slicelen
#else
"attempt to assign sequence of size %zd "
"to extended slice of size %zd",
+ newlen, slicelen
#endif
- newlen, slicelen
);
return -1;
}
@@ -1407,9 +1409,7 @@
/* Resize before creating the recycle bin, to prevent refleaks. */
if (newlen > slicelen) {
if (element_resize(self, newlen - slicelen) < 0) {
- if (seq) {
- Py_DECREF(seq);
- }
+ Py_XDECREF(seq);
return -1;
}
}
@@ -1420,9 +1420,7 @@
we're done modifying the element */
recycle = PyList_New(slicelen);
if (!recycle) {
- if (seq) {
- Py_DECREF(seq);
- }
+ Py_XDECREF(seq);
return -1;
}
for (cur = start, i = 0; i < slicelen;
@@ -1450,9 +1448,7 @@
self->extra->length += newlen - slicelen;
- if (seq) {
- Py_DECREF(seq);
- }
+ Py_XDECREF(seq);
/* discard the recycle bin, and everything in it */
Py_XDECREF(recycle);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list