diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-09 09:27:07 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-09 09:27:07 (GMT) |
commit | d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9 (patch) | |
tree | d48cff69cbba0a955c40c11f66f25aff58738d7d /Modules | |
parent | 3181feb601352e6c4a3d98991523521f4d80c00e (diff) | |
download | cpython-d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9.zip cpython-d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9.tar.gz cpython-d6a69d8ccb16c1f2600e6f31edc8d156df67c9d9.tar.bz2 |
Fixed possible leak in ElementTree.Element.iter().
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_elementtree.c | 22 |
1 files 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; |