mirror of
https://github.com/python/cpython.git
synced 2025-10-03 13:45:29 +00:00
Close #16076: fix refleak in pickling of Element.
Thanks to Ezio Melotti and Daniel Shahaf for the patch.
This commit is contained in:
commit
0f3735b8f0
1 changed files with 5 additions and 11 deletions
|
@ -859,8 +859,10 @@ element_getstate(ElementObject *self)
|
||||||
PICKLED_ATTRIB, self->extra->attrib,
|
PICKLED_ATTRIB, self->extra->attrib,
|
||||||
PICKLED_TEXT, self->text,
|
PICKLED_TEXT, self->text,
|
||||||
PICKLED_TAIL, self->tail);
|
PICKLED_TAIL, self->tail);
|
||||||
if (instancedict)
|
if (instancedict) {
|
||||||
|
Py_DECREF(children);
|
||||||
return instancedict;
|
return instancedict;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
for (i = 0; i < PyList_GET_SIZE(children); i++)
|
for (i = 0; i < PyList_GET_SIZE(children); i++)
|
||||||
Py_DECREF(PyList_GET_ITEM(children, i));
|
Py_DECREF(PyList_GET_ITEM(children, i));
|
||||||
|
@ -884,25 +886,17 @@ element_setstate_from_attributes(ElementObject *self,
|
||||||
PyErr_SetString(PyExc_TypeError, "tag may not be NULL");
|
PyErr_SetString(PyExc_TypeError, "tag may not be NULL");
|
||||||
return 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);
|
Py_CLEAR(self->tag);
|
||||||
self->tag = tag;
|
self->tag = tag;
|
||||||
Py_INCREF(self->tag);
|
Py_INCREF(self->tag);
|
||||||
|
|
||||||
Py_CLEAR(self->text);
|
Py_CLEAR(self->text);
|
||||||
self->text = text;
|
self->text = text ? text : Py_None;
|
||||||
Py_INCREF(self->text);
|
Py_INCREF(self->text);
|
||||||
|
|
||||||
Py_CLEAR(self->tail);
|
Py_CLEAR(self->tail);
|
||||||
self->tail = tail;
|
self->tail = tail ? tail : Py_None;
|
||||||
Py_INCREF(self->tail);
|
Py_INCREF(self->tail);
|
||||||
|
|
||||||
/* Handle ATTRIB and CHILDREN. */
|
/* Handle ATTRIB and CHILDREN. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue