Fixed possible leak in ElementTree.Element.iter().

This commit is contained in:
Serhiy Storchaka 2015-12-09 11:27:07 +02:00
parent 3181feb601
commit d6a69d8ccb
1 changed files with 11 additions and 11 deletions

View File

@ -1373,6 +1373,17 @@ static PyObject *
_elementtree_Element_iter_impl(ElementObject *self, PyObject *tag) _elementtree_Element_iter_impl(ElementObject *self, PyObject *tag)
/*[clinic end generated code: output=3f49f9a862941cc5 input=774d5b12e573aedd]*/ /*[clinic end generated code: output=3f49f9a862941cc5 input=774d5b12e573aedd]*/
{ {
if (PyUnicode_Check(tag)) {
if (PyUnicode_READY(tag) < 0)
return NULL;
if (PyUnicode_GET_LENGTH(tag) == 1 && PyUnicode_READ_CHAR(tag, 0) == '*')
tag = Py_None;
}
else if (PyBytes_Check(tag)) {
if (PyBytes_GET_SIZE(tag) == 1 && *PyBytes_AS_STRING(tag) == '*')
tag = Py_None;
}
return create_elementiter(self, tag, 0); return create_elementiter(self, tag, 0);
} }
@ -2238,17 +2249,6 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext)
if (!it) if (!it)
return NULL; return NULL;
if (PyUnicode_Check(tag)) {
if (PyUnicode_READY(tag) < 0)
return NULL;
if (PyUnicode_GET_LENGTH(tag) == 1 && PyUnicode_READ_CHAR(tag, 0) == '*')
tag = Py_None;
}
else if (PyBytes_Check(tag)) {
if (PyBytes_GET_SIZE(tag) == 1 && *PyBytes_AS_STRING(tag) == '*')
tag = Py_None;
}
Py_INCREF(tag); Py_INCREF(tag);
it->sought_tag = tag; it->sought_tag = tag;
it->root_done = 0; it->root_done = 0;