From d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 9 Dec 2015 11:27:07 +0200 Subject: Fixed possible leak in ElementTree.Element.iter(). --- Modules/_elementtree.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 6e2f711..5d15ed3 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; -- cgit v0.12