[Python-checkins] cpython (3.3): Issue #16076: fix refleak in pickling of Element.
eli.bendersky
python-checkins at python.org
Sat Jan 12 14:21:32 CET 2013
http://hg.python.org/cpython/rev/5b36768b9a11
changeset: 81445:5b36768b9a11
branch: 3.3
parent: 81442:b468f6c8eae5
user: Eli Bendersky <eliben at gmail.com>
date: Sat Jan 12 05:20:16 2013 -0800
summary:
Issue #16076: fix refleak in pickling of Element.
Thanks to Ezio Melotti and Daniel Shahaf for the patch.
files:
Modules/_elementtree.c | 16 +++++-----------
1 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -859,8 +859,10 @@
PICKLED_ATTRIB, self->extra->attrib,
PICKLED_TEXT, self->text,
PICKLED_TAIL, self->tail);
- if (instancedict)
+ if (instancedict) {
+ Py_DECREF(children);
return instancedict;
+ }
else {
for (i = 0; i < PyList_GET_SIZE(children); i++)
Py_DECREF(PyList_GET_ITEM(children, i));
@@ -884,25 +886,17 @@
PyErr_SetString(PyExc_TypeError, "tag may not be NULL");
return NULL;
}
- if (!text) {
- Py_INCREF(Py_None);
- text = Py_None;
- }
- if (!tail) {
- Py_INCREF(Py_None);
- tail = Py_None;
- }
Py_CLEAR(self->tag);
self->tag = tag;
Py_INCREF(self->tag);
Py_CLEAR(self->text);
- self->text = text;
+ self->text = text ? text : Py_None;
Py_INCREF(self->text);
Py_CLEAR(self->tail);
- self->tail = tail;
+ self->tail = tail ? tail : Py_None;
Py_INCREF(self->tail);
/* Handle ATTRIB and CHILDREN. */
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list