From: Serhiy Storchaka Date: Wed, 9 Dec 2015 09:27:07 +0000 (+0200) Subject: Fixed possible leak in ElementTree.Element.iter(). X-Git-Tag: v3.6.0a1~933^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9;p=python Fixed possible leak in ElementTree.Element.iter(). --- diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 6e2f711da2..5d15ed3b1b 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1373,6 +1373,17 @@ static PyObject * _elementtree_Element_iter_impl(ElementObject *self, PyObject *tag) /*[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); } @@ -2238,17 +2249,6 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext) if (!it) 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); it->sought_tag = tag; it->root_done = 0;